使用Django的ManyToMany Relation

时间:2014-08-16 14:05:12

标签: python django

我在models.py上有以下代码

class Movie(models.Model):
    mov = models.CharField(max_length = 500)
    def __str__(self):
        return self.mov

class Atrib(models.Model):
    atrib = models.CharField(max_length = 500)
    def __str__(self):
        return self.atrib

class Dict(models.Model):
    atrib = models.ForeignKey(Atrib)
    dictionary = models.ManyToManyField(Movie, related_name = 'dictionary')

我想使用Django加载这样的defaultdict:{attribute1:[movie1, movie2, ...], atribute2:[movie2, movie3,...] ... }

首先,我使用Atrib类添加了字典的所有属性。 现在我需要为每个属性添加相关电影。我尝试做以下事情,只考虑一个属性(只是测试):

attribute1 = Atrib(atrib = atribs)

for m in dictionary[attribute]:
    m = Movie(mov = m)
    m.save()
    attribute1.dictionary.add(m)

它显示以下错误:

AttributeError: 'Atrib' object has no attribute 'dictionary'.

我是否正确地为这种类型的字典做模型?为什么会出现这种错误?我是Django的新手,我有点迷路了!

提前致谢!

1 个答案:

答案 0 :(得分:1)

首先,您需要保存attribute1 = Atrib(atrib = atribs)attribute1.save()

接下来,在Attribute对象创建后,您没有与其相关的Dictionary对象。 您需要先创建它,将其设置为此对象,然后您就可以进行所需的操作。

注意:要访问attribute.dict,您需要OneToOne关系,而不是ForeignKey。