【问题标题】:Django Rest Framework, how to get number of objects of foreignkey inside another foreignkeyDjango Rest Framework,如何在另一个外键中获取外键对象的数量
【发布时间】:2020-09-09 20:57:03
【问题描述】:

我有三个模型StoreProductOrder

class Store(models.Model):
    ......

class Product(models.Model):
    store = models.ForeignKey(Store, ...)

class Order(models.Model):
    product = models.ForeignKey(Product ...)
    delivered = models.BooleanField()

我想为Store 模型创建一个@property,该模型计算拥有其产品和delivered=True 的订单数量

我将如何去做?

【问题讨论】:

  • 你想让你的序列化器也序列化property吗?从你的问题看不清楚。
  • 是的.. 它将被添加到存储的 serializer.data 中

标签: python django django-models django-rest-framework


【解决方案1】:

在您的商店模型中像往常一样定义property

class Store(models.Model):
    ......
    
    @property
    def order_count(self):
        return Order.objects.filter(product__store=self, delivered=True).count()

class Product(models.Model):
    store = models.ForeignKey(Store, ...)

class Order(models.Model):
    product = models.ForeignKey(Product ...)
    delivered = models.BooleanField()

然后在您的序列化程序中,您有两种方法可以在序列化程序中包含 order_count 属性 -

  1. StoreSerializer 中定义一个SerializerMethodField
class StoreSerializer(serializers.ModelSerializer):
   order_count = serilizers.SerializerMethodField()

   def get_order_count(self, instance):
       return instance.order_count # the property in store object

   class Meta:
       model = Store
       fields = ['other', 'fields', 'in', 'store', 'model', 'order_count']

  1. 在您的StoreSerializer 中将order_count 声明为ReadOnlyField
class StoreSerializer(serializers.ModelSerializer):
    order_count = serilizers.ReadOnlyField()

    class Meta:
        model = Store
        fields = ['other', 'fields', 'in', 'store', 'model', 'order_count']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 2017-12-05
    • 2015-03-27
    • 2017-08-15
    • 2019-07-02
    • 2016-01-09
    • 2018-03-17
    相关资源
    最近更新 更多