Python 如何使用抽象模型字段值作为Django中子模型字段的默认值?
比如说,Python 如何使用抽象模型字段值作为Django中子模型字段的默认值?,python,django,Python,Django,比如说, class Foo(models.Model): foo_field = models.CharField(max_length=30) class Meta: abstract = True class Bar(Foo): bar_field = models.CharField(max_length=30, default=Foo.foo_field) def __str__(self): return sel
class Foo(models.Model):
foo_field = models.CharField(max_length=30)
class Meta:
abstract = True
class Bar(Foo):
bar_field = models.CharField(max_length=30, default=Foo.foo_field)
def __str__(self):
return self.name
这段代码实际上并没有产生我想要的结果,但我认为它说明了总体思路。基本上,我想从foo\u字段
中获取值,如果没有为bar\u字段
输入值,则将其用作默认值
我尝试在foo模型中使用\uuuuuuu str\uuuuuuu
方法返回foo\u字段
,并用该值在Bar中定义一个变量(即foo\u字段
,但这也不允许我访问该值。许多可能的解决方案
在保存中:
def save(self):
if not self.bar_field:
self.bar_field = self.foo_field
super().save()
定义方法:
def get_bar_field(self):
return self.bar_field or self.foo_field
信号:
@receiver(pre_save, sender=Bar)
def assign_default_bar_field(sender, instance, **kwargs):
if not instance.bar_field:
instance.bar_field = instance.foo_field
定义清洁方法:
def clean(self, data):
if not 'bar_field' in data or not data['bar_field']:
data['bar_field'] = data['foo_field']
return data
哇,谢谢你的各种选择。我真的很感谢你的帮助