Мой сериализатор не возвращает все поля из модели. Просто вложенный сериализатор.Django serializer не возвращает все поля
serializer.py
class IndicatorSerializer(serializers.ModelSerializer):
class Meta:
model = Indicator
class QuoteSerializer(serializers.ModelSerializer):
class Meta:
model = Quote
class VWAPSerializer(serializers.ModelSerializer):
vwap = serializers.SerializerMethodField()
class Meta:
model = Quote
fields = ('date','open','high','low','close','vwap',)
def get_vwap(self, obj):
indicators = Indicator.objects.filter(quote__in = obj)
return IndicatorSerializer(indicators,many=True).data
views.py
def get_vwap(request):
"""
List all vwap for a date
"""
quotes = Quote.objects.filter(date__gt = '2016-05-05')
serializer = VWAPSerializer(quotes)
return Response(serializer.data)
models.py
class Quote(models.Model):
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now_add=True)
symbol = models.ForeignKey(Symbol, on_delete=models.CASCADE)
date = models.DateField(blank=True, null=True)
open = models.DecimalField(max_digits=15, decimal_places=2, null=True, blank=True)
high = models.DecimalField(max_digits=15, decimal_places=2, null=True, blank=True)
low = models.DecimalField(max_digits=15, decimal_places=2, null=True, blank=True)
close = models.DecimalField(max_digits=15, decimal_places=2, null=True, blank=True)
last = models.DecimalField(max_digits=15, decimal_places=2, null=True, blank=True)
prevclose = models.DecimalField(max_digits=15, decimal_places=2, null=True, blank=True)
tottrdqty = models.DecimalField(max_digits=15, decimal_places=2, null=True, blank=True)
tottrdval = models.DecimalField(max_digits=15, decimal_places=2, null=True, blank=True)
total_trades = models.DecimalField(max_digits=15, decimal_places=2, null=True, blank=True)
class Meta:
index_together = [
["symbol", "date"],
]
class Indicator(models.Model):
quote = models.ForeignKey(Quote, on_delete=models.CASCADE)
indicator = models.ForeignKey(IndicatorDefinition, on_delete=models.CASCADE, db_index=True)
value = models.DecimalField(max_digits=15, decimal_places=2, null=True, blank=True)
class Meta:
unique_together = ('quote', 'indicator')
Ответ
"vwap": [
{
"id": 311743,
"value": "1188.98",
"quote": 77437,
"indicator": 1
},
{
"id": 311742,
"value": "1185.52",
"quote": 77437,
"indicator": 2
},
Выход сер = VWAPSerializer() печати (магнезии (сер))
VWAPSerializer():
date = DateField(allow_null=True, required=False)
open = DecimalField(allow_null=True, decimal_places=2, max_digits=15, required=False)
high = DecimalField(allow_null=True, decimal_places=2, max_digits=15, required=False)
low = DecimalField(allow_null=True, decimal_places=2, max_digits=15, required=False)
close = DecimalField(allow_null=True, decimal_places=2, max_digits=15, required=False)
vwap = SerializerMethodField()
я не знаю, если это помогает я вижу это в журналах
VariableDoesNotExist: Failed lookup for key [name] in u'<RegexURLResolver <RegexURLPattern list> (admin:admin) ^admin/>'
[DEBUG 2017-02-05 18:59:47,163] base.py [:929] _resolve_lookup: Exception while resolving variable 'name' in template 'unknown'.
Traceback (most recent call last):
File "/Users/avgeorge/trader/python/amrapali/venv/lib/python2.7/site-packages/django/template/base.py", line 907, in _resolve_lookup
(bit, current)) # missing attribute
VariableDoesNotExist: Failed lookup for key [name] in u'<RegexURLResolver <RegexURLPattern list> (admin:admin) ^admin/>
Что нужно искать, это набор заданных котировок для возврата всей цитаты (в соответствии с моделью), а также данные VWAP в виде вложенного списка для каждой цитаты. Я надеюсь, что в этом есть смысл. Я не уверен, что я делаю неправильно и буду признателен за любую помощь.
Спасибо, Рафаэль, я использую VWAPSerializer на модели Quote и тем, что у меня есть IndicatorSerializer. –
Да, но ваш 'VWAPSerializer' имеет только одно поле, которое возвращает возвращаемое значение' IndicatorSerializer', а последнее не выполняет вложенную сериализацию 'Quote'. –
То, что я хочу, это список котировок с вложенной информацией vwap, а не vwap с вложенными кавычками. Извините, если это неясно из моего вопроса, я могу отредактировать его, если это необходимо. –