Django 模型字段:在默认关键字上引用 self

Gui*_*sta 4 python django django-models

我一直在理解这一点并想出一种方法来对模型字段selfdefault关键字进行引用:

这是我所拥有的:

class Bank(models.Model):
    number = models.CharField(max_length=10)

class Account(models.Model):
    bank = models.ForeignKey(Bank, related_name="accounts")
    number = models.CharField(max_length=20)
    created = models.DateTimeField(auto_now_add=True)
    creator = models.ForeignKey(User)
    # This is the guy
    special_code = models.CharField(max_length=30, default='%s-%s' % (self.number, self.bank.number))
Run Code Online (Sandbox Code Playgroud)

所以我试图在类定义中访问 self ,这似乎不起作用,因为 python 不知道 self 在哪里,因为它还不是一个对象。

我尝试过不同的事情,例如:

special_code = models.CharField(max_length=30, default='%s-%s' % (number, bank.number))
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,它无法识别,bank.number因为银行只有一个带有models.ForeignKey.

我也试过在Account类中使用一种方法:

def bank_number(self):
    return self.bank.number
Run Code Online (Sandbox Code Playgroud)

进而:

special_code = models.CharField(max_length=30, default='%s-%s' % (number, bank_number()))
Run Code Online (Sandbox Code Playgroud)

这有点愚蠢,因为它仍然需要自我。有没有办法做到这一点?

我需要它来存储数据库中的数字,所以使用这样的方法不会有帮助:

def special_number(self):
    return '%s-%s' % (self.number, self.bank.number)
Run Code Online (Sandbox Code Playgroud)

Ala*_*air 6

我认为没有任何方法可以在默认的可调用对象中访问 self 。还有其他几种方法可以设置字段的值:

如果您不希望用户能够更改该值,请覆盖模型的保存方法并将其设置在那里。

如果默认值只是一个建议,并且您确实希望允许用户更改它,则覆盖模型表单的__init__方法,然后您可以访问 self.instance 并更改设置字段的初始值。