2017-02-23 49 views
0

我正在使用Django的rest框架,我有一個非常簡單的模型的帖子爲特定的用戶,我已經按以下方式序列化。DRF發佈外鍵用戶Id

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完整性約束錯誤。因此,我添加了上下文= {'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) 

礦的所有其他領域都正確貼的時候我在我的模型爲用戶設置默認值爲0。我無法提交每個帖子需要保存的外鍵用戶。我在這裏做錯了什麼?我遵循正確的方法嗎?

回答

0

既然你不想發送你的用戶,你應該從序列化器的字段中刪除它。 接下來,您要將帖子的用戶設置爲當前用戶。要做到這一點,你需要通過更改保存方法來傳遞request.user到串行的數據:

posts.save(user=request.user) 

它在documentation並在tutorial

+0

謝謝!!解釋現在工作正常 – blaziken105