我正在使用Django REST框架在我的数据库/ Django模型上运行CRUD进程。我的存储客户端数据的模型非常简单,只有一个字段导致我的问题:一个CharField用于存储自定义字符串或自动生成的字符串。不需要的字段错误w/Django REST框架
class Client(models.Model):
link = models.CharField(max_length=254, default=link_generator())
我使POST请求到/clients/
端点形式输入 - 如果用户输入经由输入自定义串时,它存储该字符串按预期方式。如果他们将此字段留空,那很好 - 我想运行我的link_generator函数,它会创建一个随机字符串(下面的代码)。 相反,我得到一个错误 - Django REST Framework GUI告诉我,“这个字段可能不是空白。”但我没有指定它应该是必需的。如果我检查串行器,它明确地说,它不是必需的:
>>> from landing.serializers import ClientSerializer
>>> serializer = ClientSerializer()
>>> print(serializer)
ClientSerializer():
id = IntegerField(label='ID', read_only=True)
name = CharField(max_length=50, required=False)
email = EmailField(max_length=254, required=False)
notes = CharField(allow_blank=True, required=False, style={'type': 'textarea'})
link = CharField(max_length=254, required=False)
link_expired = BooleanField(required=False)
created = DateTimeField(read_only=True)
updated = DateTimeField(read_only=True)
UPDATE:添加串行代码瓦特/建议改进 - 非常基本的:
class ClientSerializer(serializers.ModelSerializer):
class Meta:
model = Client
fields = ('id', 'name', 'email', 'notes', 'link', 'link_expired', 'created', 'updated')
extra_kwargs = {
'link': {
'required': False,
}
}
Still, upon submitting I get this error every time.是什么使得它觉得需要的那场?同样,我想允许用户将这个字段留空,并且如果他们这样做,则运行link_generator函数。如果我明确如下说blank=True
:
link = CharField(max_length=254, blank=True, default=link_generator())
...的link_generator不会运行,并且一个空字符串最终被存储。对于它的价值,这里的link_generator代码我想在用户离开输入空白的情况下运行(旁注:我宣布这个模型上面 - 是不好的做法,应该在哪里它被宣布?):
def link_generator(size=6, chars=string.ascii_uppercase + string.digits):
return ''.join(random.choice(chars) for _ in range(size))
有什么见解吗?我很难过 - 只是不明白为什么它应该被这样标记。我对Django和REST一般都比较陌生 - 感谢任何帮助。
你可以更新你的文章,并包括你serializer.py文件中的ClientSerializer()吗?我知道你打印出串行器,但以防万一...... – user2719875
没问题,完成! – jckstl