Django外键没什么好开头的

时间:2013-11-20 18:43:49

标签: python django django-models null

通常情况下,建立一个始终没有任何内容的ForeignKey连接非常重要,然后才能add编辑

这是我的model s

class Class(models.Model):
    title = models.CharField(max_length=30)
    threshold = models.PositiveIntegerField(validators=[MaxValueValidator
        (100),MinValueValidator(60)])
    works = models.ForeignKey(Work,null=True) #blank=True also doesn't work

所以我创建了一个没有Work的类,这在逻辑上是有道理的:

math = Class("math",90)
math.save()

现在假设我们homeworkquizzesWork个实例:

math.works.add(homework,quizzes)
#gives the following error
AttributeError: 'NoneType' object has no attribute 'add'

math.works显然是空的,这是有道理的,但这不会让我添加任何东西!

我如何能够在没有任何东西的情况下启动一个ForeignKey,然后能够add到它?

1 个答案:

答案 0 :(得分:1)

我的两分钱。 首先,我认为你应该将你的外键移到工作班而不是Class类。 add()适用于多个字段See documentation

class work(models.Model):
.....
subject = models.ForeignKey(Class,null=True)

这样就建立了这种关系。作业,作为工作类实例的测验都与数学相关,作为Class类的一个实例。

当您尝试保存时,请执行以下操作:

>>> homework = work.objects.get(pk=1)
>>> math = Class.objects.get(pk=1)
>>> homework.subject = math
>>> homework.save()
>>> quizzes = work.objects.get(pk=2)
>>> math = Class.objects.get(pk=1)
>>> quizzes.subject = math
>>> quizzes.save()

现在您可以检索给定类的所有工作:

math = Class.objects.get(pk=1)
math.work_set.all()

它将返回与数学相关的所有实例,在您的情况下,将是家庭作业和测验。