Я успешно использовал SlugRelatedField
для проверки связи с другой моделью в create
. Однако, когда я 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)
...
Когда я POST, он становится успешным:
{
"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
?