我有一个使用django rest框架创建实例的模型。序列化器会报告一个丢失的slug和一个空的ForeignKey字段,该字段应该指向用户。创建模型,同时在Django Rest Framework中设置slu and和用户
我想在我的串行器来设置这些值来覆盖perform_create
,但我意识到,在标准CreateModelMixin:
class CreateModelMixin(object):
"""
Create a model instance.
"""
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
def perform_create(self, serializer):
serializer.save()
方法is_valid()
perform_create()
之前被调用。因此,为用户填充外键并添加段塞不起作用。
有没有正确的方法来解决这个问题,或者我应该重写create
?
更新:
有人问我@Rahul古普塔补充型号和序列化。在这里,他们是:
class ProductSerializer(serializers.ModelSerializer):
class Meta:
model = Product
fields=('id','name','slug',..., 'shop','category')
和
class Product(models.Model):
name = models.CharField(max_length=255)
slug = models.SlugField(max_length=255)
shop = models.ForeignKey(Shop)
category = models.ForeignKey("Category")
def __unicode__(self):
return self.name
def save(self, *args, **kwargs):
self.slug = slugify(self.name)
super(Product, self).save(*args, **kwargs)
我应该让自己更清楚一点。在浏览器中,用户填写表单以创建新的Product
实例。但是用户不会输入shop
或slug
,因为这些是自动确定的。 S is来自不同模型的名称和商店,链接到request.user
。
请为模型以及串行化器添加代码。 –
嗨@RahulGupta,我添加了模型,序列化和一些更多的信息。 –
@RahulGupta,我发现了这个问题。我会写一个答案。 –