Python Django序列化程序未返回所有字段

Python Django序列化程序未返回所有字段,python,django,serialization,Python,Django,Serialization,我的序列化程序没有从模型返回所有字段。只有嵌套的序列化程序 序列化程序.py class IndicatorSerializer(serializers.ModelSerializer): class Meta: model = Indicator class QuoteSerializer(serializers.ModelSerializer): class Meta: model = Quote class VWAPSeri

我的序列化程序没有从模型返回所有字段。只有嵌套的序列化程序

序列化程序.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
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)
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')
视图.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
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)
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')
型号.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
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)
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
        },
的输出 ser=VWAPSerializer() 打印(报告(ser))

我不知道这是否有帮助我在日志中看到了这一点

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/>
VariableDoesNotExist:在u''中查找键[name]失败
[DEBUG 2017-02-05 18:59:47163]base.py[:929]\u resolve\u lookup:解析模板“未知”中的变量“name”时出现异常。
回溯(最近一次呼叫最后一次):
文件“/Users/avgeorge/trader/python/amrapali/venv/lib/python2.7/site packages/django/template/base.py”,第907行,在“解析”查找中
(位,当前))#缺少属性
VariableDoesNotExist:在u'中查找键[name]失败

我要找的是一组给定的报价,用于返回所有报价信息(根据模型)以及作为每个报价嵌套列表的VWAP数据。我希望这是有道理的。我不确定我做错了什么,非常感谢您的帮助。

您需要在
指示器中使用
QuoteSerializer
。请参见
django rest framework

谢谢Raphael,我在报价模型上使用了VWAPSerializer,因为我有IndicatorSerializer。是的,但是您的
VWAPSerializer
只有一个字段返回
IndicatorSerializer
的返回值,后者不执行
Quote
的嵌套序列化。我想要的是包含嵌套vwap信息的引号列表,而不是包含嵌套引号的vwap。。很抱歉,如果我的问题不清楚,我可以在必要时对其进行编辑。您仅使用
vwap
指定了
字段
。你已经排除了所有其他领域的问题,我也这么做了,并且编辑了问题来展示它。我认为默认情况下,模型序列化程序会自动包含所有字段。我现在已经明确地添加了它们,但响应是相同的。我还编辑了这个问题以显示打印序列化程序的输出。