如何为Django的ForeignKey模型或AdminModel字段指定默认值?

34 投票
14 回答
55835 浏览
提问于 2025-04-15 11:59

我该如何在Django模型或管理模型中为外键字段设置一个默认值呢?

像这样(但当然这样是不行的)……

created_by = models.ForeignKey(User, default=request.user)

我知道我可以在视图中“变通”一下,但在管理模型中似乎不太可能。

14 个回答

11

这里有一个在Django 1.7中有效的解决方案。你可以在字段定义时不直接提供默认值,而是把它设置为可以为空(null-able)。然后重写'save'函数,在第一次保存的时候(当它为空时)给它填上值:

class Foo(models.Model):
    a = models.CharField(max_length=42)

class Bar(models.Model):
    b = models.CharField(max_length=42)
    a = models.ForeignKey(Foo, null=True)

    def save(self, *args, **kwargs):
        if self.a is None:  # Set default reference
            self.a = Foo.objects.get(id=1)
        super(Bar, self).save(*args, **kwargs)
17

对于Django 1.7或更高版本,

只需要创建一个ForeignKey对象并保存它。"默认"值可以是你想要默认链接的对象的ID。

举个例子,

created_by = models.ForeignKey(User, default=1)
38

在编程中,有时候我们需要处理一些数据,比如从一个地方获取信息,然后在另一个地方使用这些信息。这个过程就像是把水从一个水桶倒到另一个水桶里。

有些时候,我们需要确保在这个过程中不会丢失任何信息,就像在倒水的时候要小心,不让水洒出来一样。为了做到这一点,我们可以使用一些工具和方法来帮助我们管理这些数据。

另外,编程中还有一些特定的规则和步骤,帮助我们更好地组织和使用这些数据。就像在做菜时需要按照食谱来操作,才能做出美味的菜肴。

总之,处理数据就像是一个精细的过程,需要我们小心翼翼地进行,确保每一步都做到位。

class Foo(models.Model):
    a = models.CharField(max_length=42)

class Bar(models.Model):
    b = models.CharField(max_length=42)
    a = models.ForeignKey(Foo, default=lambda: Foo.objects.get(id=1) )

撰写回答