我有一个简单的模型:
class TestRentalObject(models.Model):
some_field = models.TextField()
build_year = models.PositiveSmallIntegerField(
blank=True,
null=True,
validators=[MinValueValidator(1300), MaxValueValidator(2100)],
)
使用ModelSerializer:
class TestRentObjectSerializer(serializers.ModelSerializer):
class Meta:
model = TestRentalObject
fields = (
"some_field",
"build_year"
)
这是表单中的输入字段:
<input type="number" class="input-group__input input-group__input_no-require is-invalid" id="field-rent.build_year" placeholder="" name="rent.build_year">
当我将此字段保留为空时,序列化程序将其视为无效。
In [8]: data = {'some_field': 'some_text', 'build_year': ''}
In [9]: rs = TestRentObjectSerializer(data=data)
In [10]: rs.is_valid()
Out[10]: False
In [11]: rs.errors
Out[11]: {'build_year': [ErrorDetail(string='A valid integer is required.', code='invalid')]}
我相信问题是我将build_year作为空字符串而不是无。但是如何正确执行呢?
答案 0 :(得分:0)
正如NeErAj KuMaR在评论中建议的那样,我在视图方法中添加了几行。
if request.data["rent"].get("build_year") == "":
del request.data["rent"]["build_year"]
serializer = TestRentObjectSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
它看起来有些斑驳,但我没有找到更好的方法来实现这一点。