2017-02-05 6 views
0

Мой сериализатор не возвращает все поля из модели. Просто вложенный сериализатор.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 в виде вложенного списка для каждой цитаты. Я надеюсь, что в этом есть смысл. Я не уверен, что я делаю неправильно и буду признателен за любую помощь.

ответ

0

Вам необходимо использовать QuoteSerializer в вашем IndicatorSerializer. См. django-rest-framework's documentation on nested relationships.

+0

Спасибо, Рафаэль, я использую VWAPSerializer на модели Quote и тем, что у меня есть IndicatorSerializer. –

+0

Да, но ваш 'VWAPSerializer' имеет только одно поле, которое возвращает возвращаемое значение' IndicatorSerializer', а последнее не выполняет вложенную сериализацию 'Quote'. –

+0

То, что я хочу, это список котировок с вложенной информацией vwap, а не vwap с вложенными кавычками. Извините, если это неясно из моего вопроса, я могу отредактировать его, если это необходимо. –