我将默认的帖子作者设置为null,并使用form_valid函数覆盖帖子作者并将当前登录的用户分配给该作者。
form_valid()函数取自django官方文档,但由于某种原因它什么也没做。
我的django版本是:django-rest-framework = 3.12.2。Django = 3.1.4
models.py
class Recipe(models.Model):
id = models.UUIDField(
primary_key=True,
default=uuid.uuid4,
editable=False
)
author = models.ForeignKey(get_user_model() , on_delete=models.CASCADE, null=True) #
title = models.CharField(max_length=150)
description = models.TextField(blank=True)
serializers.py
class RecipeCreateSerializer(serializers.ModelSerializer):
class Meta:
model = Recipe
fields = ('title', 'description')
views.py
class RecipeCreate(CreateAPIView):
permission_classes = (permissions.IsAuthenticated, )
queryset = Recipe.objects.all()
serializer_class = RecipeCreateSerializer
def form_valid(self, form):
form.instance.author = self.request.user
return super(RecipeCreate, self).form_valid(form)
希望这里的某人会知道如何解决此问题。提前致谢
我认为您正在混淆Django基于类的视图和Django rest框架视图。在docs中,声明如果要request.user
在序列化程序中使用,则必须使用perform_create
方法。因此,首先,您必须将author
字段添加到RecipeCreateSerializer
in中serializers.py
。
class RecipeCreateSerializer(serializers.ModelSerializer):
class Meta:
model = Recipe
fields = ('title', 'description', 'author') # Add author now
并且您的RecipeCreate
视图现在将具有perform_create
方法,而不是form_valid
:
class RecipeCreate(CreateAPIView):
permission_classes = (permissions.IsAuthenticated, )
queryset = Recipe.objects.all()
serializer_class = RecipeCreateSerializer
def perform_create(self, serializer):
serializer.save(user=self.request.user)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句