2016-08-03 3 views
3

DRFでdjangoプロジェクトを作った。 enter image description hereDRF(django-rest-framework)では、カラム "author_id"のnull値がnullでない制約に違反します。私は何をすべきか?

そのウィンドウから、私は投稿をクリックしたので、それはうまくいきませんでした。

トレースバック

#I almost omitted other codes 
Environment: 

Request Method: POST 
Request URL: http://127.0.0.1:8000/comments/ 

Django Version: 1.9.7 
Python Version: 3.5.2 

Traceback: 

Exception Type: IntegrityError at /comments/ 
Exception Value: null value in column "author_id" violates not-null constraint 
DETAIL: Failing row contains (2, comment1, 2016-08-03 13:30:59.536186+00, null, null). 

serializers.py

class UserSerializer(serializers.HyperlinkedModelSerializer): 
    posts = serializers.HyperlinkedRelatedField(many=True, view_name='post-detail', read_only=True) 
    comments = serializers.HyperlinkedRelatedField(many=True, view_name='comment-detail', read_only=True) 
    class Meta: 
     model = User 
     fields = ('url','id', 'pk', 'username', 'email', 'comments', 'posts', 'author') 

class CommentSerializer(serializers.HyperlinkedModelSerializer): 
    author = serializers.ReadOnlyField(source='author.username') 
    post = serializers.ReadOnlyField(source='post.title') 
    highlight = serializers.HyperlinkedIdentityField(view_name='comment-highlight', format='html') 
    class Meta: 
     model = Comment 
     fields = ('url','id', 'pk', 'post', 'author', 'text','highlight') 

models.py

class Comment(models.Model): 
    post = models.ForeignKey('blog.Post', related_name='related_comments') 
    author = models.ForeignKey(User, related_name='related_commentwriter') 
    text = models.TextField(max_length=500) 
    created_date = models.DateTimeField(default=timezone.now) 

    def __str__(self): 
     return self.text 

さらに私はdjango rest authを使用しています。

このエラーはなぜ発生しますか?これを解決するには?

読んでいただきありがとうございます。

答えて

0

authorフィールドにnullのコメントインスタンスを作成できませんでした。あなたはpostフィールドと

class CommentSerializer(serializers.HyperlinkedModelSerializer): 
................... 

def create(self, validated_data): 
    validated_data['author'] = self.context['request'].user 
    return super(CommentSerializer, self).create(validated_data) 

同じ新しいコメントを作成するとき、それはあなたが著者を追加することができます修正するため 。

+0

ありがとうございました! – touchingtwist

関連する問題