DjangoRestFramework - 如何检查 valiated_data 中是否存在可选的序列化程序字段?
DjangoRestFramework - How do I check if an optional serializer field exists in valiated_data?
我的模型是这样的:
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'],
)
此时,我想检查一下'subject'是不是终端用户提供的,如果是,则添加字段,然后保存post对象(否则保存post 对象而不添加 'subject' 字段)。我打开 python shell 并这样做:
p = PostSerializer(data={'user':16, 'post':'p'})
p.is_valid()
# returned True
if p.validated_data['subject']:
print('exists')
else:
print('does not exist')
和这个 returns 一个错误说:
Traceback (most recent call last):
File "<console>", line 1, in <module>
KeyError: 'subject'
话虽如此,检查验证字段是否存在的正确方法是什么?
您可以从 p
访问 .data
属性:
p.data.get('subject', None)
如果此 returns None
则 'subject' 字段不存在。调用 .is_valid()
方法时会验证数据。
我的模型是这样的:
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'],
)
此时,我想检查一下'subject'是不是终端用户提供的,如果是,则添加字段,然后保存post对象(否则保存post 对象而不添加 'subject' 字段)。我打开 python shell 并这样做:
p = PostSerializer(data={'user':16, 'post':'p'})
p.is_valid()
# returned True
if p.validated_data['subject']:
print('exists')
else:
print('does not exist')
和这个 returns 一个错误说:
Traceback (most recent call last):
File "<console>", line 1, in <module>
KeyError: 'subject'
话虽如此,检查验证字段是否存在的正确方法是什么?
您可以从 p
访问 .data
属性:
p.data.get('subject', None)
如果此 returns None
则 'subject' 字段不存在。调用 .is_valid()
方法时会验证数据。