【发布时间】:2015-11-02 08:01:12
【问题描述】:
class MyModel(models.Model):
field1 = models.ForeignKey('AnotherModel', null=False, blank=False)
field2 = #its a choice field
# some more fields
如果field2 等于某个特定值(来自选择元组),我想要用默认值填充field1。
我尝试了重写save() 方法,但没有成功。
def save(self, *args, *kwargs):
if self.field2 == 'some-specific-value':
self.field1 = 'some-default-value or a dummy object id?'
对于选择字段 (field2) 的其他值,用户必须提供一个值,但如上所述,对于特定值,我们将使用默认单词/字符串填充。
我什至尝试使用信号pre_save、pre_init、post_init,但没有成功
@receiver(post_init, sender=MyModel)
def populate_field1(sender, instance, *args, **kwargs):
print 'in signal'
if instance.field2 == 'some-specific-value':
instance.field1 = 'some-default-value'
我该怎么做?
【问题讨论】:
-
I gave it a try by overriding save() method but not successful并没有真正帮助,您的具体错误情况是什么。 -
@HeddevanderHeide:当我尝试使用 django admin 保存此模型并将字段 1 留空但字段 2 具有特定值时,一旦我单击保存按钮,它就会显示这是必填字段并且不保存.
This field is required.错误出现在 RED 背景中 -
显然因为您将 null 和 blank 都设置为 False,您可以删除它们并手动清理它们吗?
-
那么你有解决这个问题的办法吗?
-
我的意思是,如果你只是在 python shell 中调用
instance.save(),它应该可以工作,因为不会调用验证。所以要让它在 django 管理员中工作,你需要自定义模型上的验证。
标签: python django django-models django-signals