我有一个Ticket
模型和一个Product
模型,我想确保不可能将产品的可用票证数量更改为小于已经售出的票证数量。为了实现这一点,我在serializer update方法中使用聚合查询。你知道吗
但是,为了使用这个特定实例的聚合查询,您需要将pk
设置为read_only=False
(als tom christie自己建议:https://github.com/tomchristie/django-rest-framework/issues/2320)。然而,这又带来了另一个问题,因为现在我必须确保人们不可能更改pk
。有没有人知道如何实现这一点或以另一种方式实现聚合验证,这样我就不必公开我的Product
模型的pk
?你知道吗
这是我的模型:
class Product(models.Model):
name = models.CharField(max_length=50)
amount = models.IntegerField()
price = models.DecimalField(max_digits=5, decimal_places=2)
class Ticket(models.Model):
buyername = models.CharField(max_length=50)
buyeremail = models.EmailField(max_length=254)
product = models.ForeignKey(Product,related_name='tickets')
这是我的产品序列化程序:
class ProductSerializer(serializers.HyperlinkedModelSerializer ):
pk = serializers.IntegerField(read_only=False)
name = serializers.CharField(min_length=3,max_length=50)
amount = serializers.IntegerField(min_value = 0,max_value = 100)
price = serializers.DecimalField(min_value=1.0,max_value=1001.0,max_digits=5, decimal_places=2)
ticketssold = serializers.IntegerField(read_only=True)
class Meta:
model = Product
def update(self, instance, validated_data):
instance.amount = validated_data['amount']
#get the amount of tickets sold
filtered_data = Product.objects.filter(pk=validated_data['pk']).aggregate(Count('tickets'))
if instance.amount < filtered_data['tickets__count']:
raise serializers.ValidationError("It is not possible to update the amount of tickets to less tickets than there are sold!")
instance.save()
return instance
目前没有回答
相关问题 更多 >
编程相关推荐