我已成功用于SlugRelatedField验证与create. 但是,当 I 时use update,它无法正确验证。
假设我有:
#models.py
class Product(models.Model):
name = models.CharField()
amount = models.IntegerField()
description = models.TextField()
def __str__(self):
return "{} XL".format(self.name)
class Query(models.Model):
name = models.CharField()
product = models.ForeignKey(Product)
...
#serializers.py
class ProductSerializer(serializers.ModelSerializer):
class Meta:
model = Product
fields = '__all__'
class QuerySerializer(serializers.ModelSerializer):
product = serializers.SLugRelatedField(slug_field='name', queryset=Product.objects.all())
class Meta:
model = Query
fields = '__all__'
def create(self, validated_data):
product = validated_data.pop('product').name
...
def update(self, instance, validated_data):
instance.product = validated_data.get('product', instance.product)
...
当我发布时,它会成功:
{
"name": "Query 1",
"product": "Pants",
...
}
但是当我修补时,它会出现问题并得到响应错误。我知道__str__模型中的 使事情复杂化。但是我想在不删除它的情况下解决它。
{
...
"product": "Shirt",
...
}
响应错误:
{'product': ['Object with name=Shirt XL does not exist.']}
如何在更新时捕获验证?我尝试添加validate以打印数据。但是为什么更新时不打印?
def validate(self, data):
print(data) # Does not print on update
return data
update有没有办法product = product.name像我一样改变它create?