【发布时间】:2017-02-23 06:21:17
【问题描述】:
我正在使用 django rest 框架,并且我为特定用户提供了一个非常简单的帖子模型,我已按以下方式对其进行序列化。
序列化器.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 Integrity 约束错误。因此,我将 context={'request': request}) 添加到序列化程序中,这最终给了我以下错误:
无法使用视图名称“用户详细信息”解析超链接关系的 URL。您可能未能在 API 中包含相关模型,或者在此字段上错误地配置了 lookup_field 属性。
我的views.py如下: 视图.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 时,我的所有其他字段都已正确发布。我无法提交需要在每个帖子中保存的外键用户。我在这里做错了什么?我是否遵循正确的方法?
【问题讨论】:
标签: django django-rest-framework