我想结合来自2个不同模型的2个查询集,然后我需要按日期排序,最后我的目标是序列化它。
到目前为止,我做到了:
last_actions = serializers.SerializerMethodField()
def get_last_actions(self, obj):
prc = obj.product_request_configs.all().order_by('modified_date')[:5]
psc = obj.product_send_configs.all().order_by('modified_date')[:5]
result_list = sorted(
chain(prc, psc),
key=attrgetter('modified_date'),
reverse=True)
但我不知道如何调用我的两个django rest序列化器,以便我可以返回正确的数据。
如果我可以创建一个数据库视图,我认为它会更简单。
答案 0 :(得分:0)
序列化程序旨在匹配一个模型关系,因此我们需要为您要实现的逻辑创建自定义Model
:
class CustomModel(models.Model):
def dictfetchall(self, cursor):
"""Returns all rows from a cursor as a dict"""
desc = cursor.description
return [dict(zip([col[0] for col in desc], row))
for row in cursor.fetchall()]
def yourMethod(self):
cursor = connection.cursor()
cursor.execute("""
select field1, field2 from app_table
where field1=%s and field2=%s group by field1
""",
[value1, value2,]
)
return self.dictfetchall(cursor)
class Meta:
abstract = True
这将返回一个字典,然后您可以使用如下的seializer序列化该响应:
class CustomModelSerializer(serializers.Serializer):
field1 = serializers.IntegerField()
field2 = serializers.CharField()
请注意,在SQL上,您可以使用as
关键字重命名某些字段,字段的当前名称必须与序列化程序中的var名称匹配。