7

私のモデルはこれです:

class Post(models.Model):
    user = models.ForeignKey(User)
    post = models.CharField(max_length=400)
    subject = models.ForeignKey(Subject, blank=True, null=True)

これは私のシリアライザです:

class PostSerializer(serializers.ModelSerializer):

    class Meta:
        model = Post
        fields = ('user', 'post', 'subject')

    def create(self, validated_data):
        post = Post(
                user =  User.objects.get(username='A'),
                post = validated_data['post'],
        )

この時点で、「件名」がエンド ユーザーによって提供されたかどうかを確認し、提供されている場合は、フィールドを追加して投稿オブジェクトを保存します (そうでない場合は、「件名」フィールドを追加せずに投稿オブジェクトを保存します)。Pythonシェルを開いて、これを行いました:

p = PostSerializer(data={'user':16, 'post':'p'})
p.is_valid()
# returned True
if p.validated_data['subject']:
    print('exists')
else:
    print('does not exist')

これは次のエラーを返します。

Traceback (most recent call last):
  File "<console>", line 1, in <module>
KeyError: 'subject'

そうは言っても、検証されたフィールドが存在するかどうかを確認する正しい方法は何ですか?

4

1 に答える 1

13

.data次の場所からattrにアクセスできますp

p.data.get('subject', None)

これが返される場合None、「件名」フィールドは存在しません。メソッドを呼び出すと、データが検証されます.is_valid()

于 2015-10-07T02:22:33.033 に答える