我想在我的Django模型中存储一个字段列表(我不想出于某些原因使用相关字段,只验证用户是否发送了正确的列表)。
我正确地工作了,问题是我在通过Django REST Framework更新对象时不强制使用该字段是不成功的。
这是我的实现,我测试了一些具有相同结果的变体
class SomeModel(models.Model):
hashtags = models.CharField(max_length=512, default=None, null=True, blank=True)
@property
def hashtags_as_list(self):
""" Hashtags are stored on DB as a text json convert to object again
"""
return json.loads(self.hashtags) if self.hashtags else None
@hashtags_as_list.setter
def hashtags_as_list(self, value):
""" Hashtags are stored on DB as a text json of the list object
"""
self.hashtags = json.dumps(value)
class SomeModelSerializer(serializers.ModelSerializer):
hashtags = serializers.ListField(
source='hashtags_as_list',
default = [],
required = False,
child = serializers.CharField(min_length=3, max_length=32, required=False)
)
当我在Browsable API上执行PUT时,我只收到错误,检查查询是否将标签发送为空白。
------WebKitFormBoundary4L5MFBPrRA0QDqFL
Content-Disposition: form-data; name="hashtags"
------WebKitFormBoundary4L5MFBPrRA0QDqFL
错误如下:
{
"hashtags": [
"This field may not be blank."
]
}
答案 0 :(得分:0)
您正在发送hashtags
的发布数据,但没有内容,这就是DRF返回该错误消息的原因。您可以使用以下方法解决此问题:
hashtags = serializers.ListField(required=False, child=CharField(allow_blank=True, ...), ...)
但请注意,您可能需要调整一些代码,以便在hashtags
标准化为空字符串时进行处理。