Django初学者。
class A(models.Model):
b = models.ForeignKey(B)
...
class B(models.Model):
user = models.ForeignKey(User)
...
我希望能够创建A
的实例,而无需明确指定B
的实例。我发现ForeignKey
字段接受default
参数,但我无法弄清楚如何为每个用户创建一个实例。
像
这样的东西class A(models.Model):
b = models.ForeignKey(B, default=B(user=request.user))
但这显然不起作用,因为该模型不了解request
。
在需要时(创建A
时,而不是在创建User
时)创建此默认实例的好方法是什么?适合它的地方在哪里?
答案 0 :(得分:0)
在需要时(创建A时)创建此默认实例的好方法是什么?
显然。这是唯一可行的方法。
有各种默认值。模型默认值存在于任何应用程序之外。
这是一个不能成为"模型的好例子。默认值,因为它取决于当前会话以及与该会话关联的当前用户。
它是一个"应用程序"默认。它在模型之外 。理想情况下,它只是View功能的一部分。
如果要使用默认管理员,则可以通过扩展Admin类定义来包含此默认值来执行此操作。
答案 1 :(得分:0)
你可以这样做:
class A(models.Model):
b = models.ForeignKey(B)
def save(self, *args, **kwargs):
user = kwargs["user"]
if not self.id and not self.b:
obj_b = B.objects.create(user=user)
self.b = obj_b
return super(A, self).save(*args, **kwargs)
class B(models.Model):
user = models.ForeignKey(User)
但这是一个非常特殊的不灵活的解决方案。
答案 2 :(得分:0)
我希望能够在没有显式的情况下创建A的实例 指定B的实例。
class A(models.Model):
b = models.ForeignKey(B,blank=True,null=True)