#python #django #django-models #django-rest-framework
#python #django #django-модели #django-rest-framework
Вопрос:
У меня есть три модели Store
, Product
и Order
class Store(models.Model):
......
class Product(models.Model):
store = models.ForeignKey(Store, ...)
class Order(models.Model):
product = models.ForeignKey(Product ...)
delivered = models.BooleanField()
Я хочу создать @property
для Store
модели, которая вычисляет количество заказов, в которых есть свои продукты, а также имеет delivered=True
как я буду это делать?
Комментарии:
1. Вы хотите, чтобы ваш сериализатор тоже сериализовал
property
? Из вашего вопроса неясно.2. ДА.. он будет добавлен в serializer.data для хранилища
Ответ №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
свойство в ваш сериализатор —
- Определите
SerializerMethodField
вStoreSerializer
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']
- Объявите
order_count
какReadOnlyField
в вашемStoreSerializer
class StoreSerializer(serializers.ModelSerializer):
order_count = serilizers.ReadOnlyField()
class Meta:
model = Store
fields = ['other', 'fields', 'in', 'store', 'model', 'order_count']