Django Rest框架系列化关系
如何序列化相关模型中的字段 我有一个模型:Django Rest框架系列化关系,django,django-rest-framework,Django,Django Rest Framework,如何序列化相关模型中的字段 我有一个模型: class Order(models.Model): order_id = models.BigIntegerField(verbose_name='Order ID', unique=True) order_name = models.CharField(verbose_name='Order name', max_length=255) order_type = models.IntegerField(verbose_nam
class Order(models.Model):
order_id = models.BigIntegerField(verbose_name='Order ID', unique=True)
order_name = models.CharField(verbose_name='Order name', max_length=255)
order_type = models.IntegerField(verbose_name='Campaign type')
class Types(models.Model):
delimiter = models.CharField(verbose_name='Delimiter', max_length=255)
status = models.BooleanField(verbose_name='Status', default=True)
title = models.CharField(verbose_name='Title', max_length=255)
class User(models.Model):
name = models.CharField(verbose_name='User name', max_length=200, unique=True)
class Report(models.Model):
order = models.ForeignKey(Order, to_field='order_id', verbose_name='Order ID')
user = models.ForeignKey(User, verbose_name='User ID')
ad_type = models.ForeignKey(Types, verbose_name='Type')
imp = models.IntegerField(verbose_name='Total imp')
month = models.DateField(verbose_name='Month', default=datetime.datetime.today)
视图:
序列化程序:
class ReportSerializer(ModelSerializer):
class Meta:
model = Report
depth = 1
class ReportSerializer(serializers.ModelSerializer):
user = serializers.IntegerField()
user_name = serializers.CharField()
order_id = serializers.IntegerField()
order_name = serializers.CharField()
order_type = serializers.IntegerField()
imp = serializers.IntegerField()
class Meta:
model = Report
fields = [
'user', 'user_name', 'order_id', 'order_name',
'order_type', 'imp'
]
depth = 1
def to_representation(self, instance):
Reports = namedtuple('Reports', [
'user',
'user_name',
'order_id',
'order_name',
'order_type',
'imp',
])
return super(ReportSerializer, self).to_representation(
Reports(*instance)._asdict()
)
我需要在get_queryset()中获取“queryset”中的所有字段
但我有一个错误:
试图获取上的字段imp
的值时,获取了AttributeError
序列化程序ReportSerializer
。序列化程序字段可能已命名
不正确且不匹配元组上的任何属性或键
例如。原始异常文本为:“tuple”对象没有属性
“小鬼”
但是,如果我返回get_queryset(),只需Report.objects.filter(month=month).all(),我将获取所有对象和包含所有字段的相关对象,而不聚合imp,也不进行分组
所以问题是如何使序列化程序返回在queryset中设置的结构 get_queryset
方法需要返回queryset,但您返回元组是因为。要么删除它以返回查询集,要么使用更通用的视图,如APIView
我找到了一种方法
当我使用.values_list()时,它返回list对象而不是queryset对象。所以对于serializer,请理解我在serializer中定义的所有字段列表中的内容。在to_representation()中,我按原样返回字典
序列化程序:
class ReportSerializer(ModelSerializer):
class Meta:
model = Report
depth = 1
class ReportSerializer(serializers.ModelSerializer):
user = serializers.IntegerField()
user_name = serializers.CharField()
order_id = serializers.IntegerField()
order_name = serializers.CharField()
order_type = serializers.IntegerField()
imp = serializers.IntegerField()
class Meta:
model = Report
fields = [
'user', 'user_name', 'order_id', 'order_name',
'order_type', 'imp'
]
depth = 1
def to_representation(self, instance):
Reports = namedtuple('Reports', [
'user',
'user_name',
'order_id',
'order_name',
'order_type',
'imp',
])
return super(ReportSerializer, self).to_representation(
Reports(*instance)._asdict()
)
视图:
很抱歉我在回答中添加了描述。