関連モデルのフィールドを直列化する方法。Django Restフレームワークの関係を整理する
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 ReportLisAPIView(ListAPIView):
serializer_class = ReportSerializer
def get_queryset(self):
month = parse_date(self.kwargs['month']) - relativedelta(day=1)
queryset = (
Report.objects.filter(month=month)
.values_list(
'user', 'user__name', 'order__order_id',
'order__order_name', 'order__order_type'
).all().annotate(Sum('imp'))
)
return queryset
シリアライザ:私はget_querysetの 'クエリセット' のようにすべてのフィールドを取得する必要があり
class ReportSerializer(ModelSerializer):
class Meta:
model = Report
depth = 1
()
は私がモデルですエラーが発生しました:Got AttributeError when attempting to get a value for field
imp
on
serializerReportSerializer
. The serializer field might be named incorrectly and not match any attribute or key on thetuple
instance. Original exception text was: 'tuple' object has no attribute 'imp'.
しかし、私がget_queryset()に戻った場合は、Report.objects.filter(月=月).all()だけで、すべてのフィールドと関連オブジェクトを取得します。
それでは、クエリーセットで設定したシリアライザのリターン構造をどうやって作るのですか?
説明... – marcusshep
申し訳ありません。私は私の答えに説明を追加しました。 – user2160537