2017-02-23 18 views
0

私はdjango restフレームワークを使用していますが、私は次のようにシリアル化した特定のユーザーの非常に単純なPostsモデルを持っています。DRF投稿外部キーUserId

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') 

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) 

を次のように私のmodels.pyがあり、私はこれに投稿しようとしたとき、私は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) 

私は、ユーザーのための私のモデルにデフォルト= 0を設定したときに私の他のすべてのフィールドが正しく掲載されています。すべての投稿に保存する必要がある外部キーユーザーを送信できません。私はここで間違って何をしていますか?正しい方法に従っていますか?

答えて

0

ユーザを送信したくないので、シリアライザのフィールドから削除する必要があります。 次に、現在のユーザーに投稿のユーザーを設定します。それを実現するには、に保存する方法を変更することにより、シリアライザのデータへrequest.userを渡したい:

posts.save(user=request.user) 

それはdocumentationにし、tutorial

+0

おかげで説明しています!今すぐうまくいく – blaziken105

関連する問題