【发布时间】:2023-03-25 13:26:01
【问题描述】:
我有一个名为 'active' 的值,它在 Django 模型中默认为 'True'。我不想设置这个值并允许它由默认操作创建,但是,在 Django REST 框架中的某个地方,它在到达序列化程序中的验证方法之前被设置为“False”。如何防止此操作或至少捕获它,以便将不存在的“活动”值设置为“真”?
我只是发布相关代码,这是一个复杂的系统,完整的代码会让人不知所措。状态列来自这个抽象类模型。如您所见,只有活动列默认为 True。
class StatusModelMixin(models.Model):
active = models.BooleanField(
verbose_name=_("Active"), default=True,
help_text=_("If checked the record is active."))
soft_delete = models.BooleanField(
verbose_name=_("Hide"), default=False,
help_text=_("If checked the record is removed from all queries."))
purge = models.BooleanField(
verbose_name=_("Purge"), default=False,
help_text=_("If checked the record will be deleted."))
class Meta:
abstract = True
def save(self, *args, **kwargs):
"""
Intercept the save and update the 'purge' and 'soft_delete' objects.
This save will not be called during bulk creates and updates, so the
logic below will need to be duplicated for each object in bulk
operations.
"""
if self.purge: self.soft_delete = True
if self.soft_delete: self.active = False
super(StatusModelMixin, self).save(*args, **kwargs)
这只是受我遇到的问题影响的序列化程序类之一。你可以看到我的一些测试代码没有解决这个问题。
class OrganizationSerializer(serializers.ModelSerializer):
user = serializers.HyperlinkedRelatedField(
view_name='user-detail', read_only=True)
uri = serializers.HyperlinkedIdentityField(
view_name='organization-detail')
#active = serializers.BooleanField(default=True, required=True)
class Meta:
model = Organization
fields = ('id', 'address_01', 'address_02', 'city', 'region',
'postal_code', 'country', 'phone', 'fax', 'active',
'soft_delete', 'purge', 'ctime', 'mtime', 'institution',
'user', 'uri')
exclude = ('purge',)
read_only_fields = ('id', 'ctime', 'mtime',)
depth = 0
#def validate(self, attrs):
# log.debug("attrs: %s", attrs)
# return attrs
谢谢
【问题讨论】:
标签: django django-rest-framework