自动创建对象

时间:2012-01-25 21:07:12

标签: python django

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时)创建此默认实例的好方法是什么?适合它的地方在哪里?

3 个答案:

答案 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)