我正在使用django rest框架,我为一个特定用户提供了一个非常简单的Posts模型,我已按以下方式序列化。
Serializers.py
class PostSerializer(serializers.HyperlinkedModelSerializer):
image = serializers.ImageField(max_length=None, use_url=True)
question = serializers.CharField(required=False)
ayes = serializers.CharField(required=False)
nays = serializers.CharField(required=False)
neutrals = serializers.CharField(required=False)
class Meta:
model = Posts
fields = ('user','question', 'image','ayes', 'nays', 'neutrals')
我的models.py如下
class Posts(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
created = models.DateTimeField(auto_now_add=True)
question = models.TextField(max_length=500, blank=True)
image = models.ImageField('optionalImage', upload_to='images/posts/', default='/images/posts/blank.png')
ayes = models.TextField(max_length=200, default=0)
nays = models.TextField(max_length=200, default=0)
neutrals = models.TextField(max_length=200, default=0)
当我尝试发布到此时,我一直收到user_id的NOT NULL完整性约束错误。因此我将context = {'request':request}添加到序列化程序,最终给出了以下错误:
无法使用视图名称“user-detail”解析超链接关系的URL。您可能未能在API中包含相关模型,或者在此字段上错误地配置了lookup_field
属性。
我的views.py如下: views.py
@permission_classes((IsAuthenticated, ))
class PostsView(generics.ListCreateAPIView):
queryset = Posts.objects.all()
serializer_class = PostSerializer
def get(self, request, format=None):
snippets = Posts.objects.filter(pk=request.user.id)
serializer = PostSerializer(snippets, many=True,context={'request': request})
return Response(serializer.data)
def post(self, request, format=None):
posts = PostSerializer(data=request.data,context={'request': request})
if posts.is_valid():
posts.save()
return Response("YOLO", status=status.HTTP_201_CREATED)
else:
return Response(posts.errors, status=status.HTTP_400_BAD_REQUEST)
当我在我的模型中为用户设置default = 0时,我的所有其他字段都已正确发布。我无法提交需要在每个帖子上保存的外键用户。我在这做错了什么?我是否遵循了正确的方法?
答案 0 :(得分:1)
由于您不想发送用户,因此应将其从序列化程序的字段中删除。
接下来,您要将帖子的用户设置为当前用户。为此,您希望通过将save方法更改为:{/ p>将request.user
传递给序列化程序的数据
posts.save(user=request.user)
中对此进行了解释