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

哇,谢谢你的各种选择。我真的很感谢你的帮助