如何为Django的ForeignKey模型或AdminModel字段指定默认值?
我该如何在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) )