2011-06-24 57 views
1

我有2个名为'作者'和'条目'的模型定义如下。Django多对多关系后向查询

class Author(models.Model): 
    name = models.CharField(max_length=50) 
    email = models.EmailField() 
    msgtoauthor = models.TextField() 

class Entry(models.Model): 
    blog = models.ForeignKey(Blog) 
    headline = models.CharField(max_length=255) 
    body_text = models.TextField() 
    pub_date = models.DateTimeField() 
    authors = models.ManyToManyField(Author) 

我试图从'Entry'访问'Author.msgtoauthor'。

我知道,我可以检索通过

e = Entry.objects.get(authors) 

进入和作者之间的关系是可以提取的作者ID?

我知道在后端,Django为作者和条目创建一个表,但我想从'Entry'中的方法更新'msgtoauthors'。

在此先感谢。

回答

3

您是不是要找

for author in my_entry.authors.all(): 
    author.msgtoauth = 'Here is new content' 
    author.save() 

Entry.authors返回一个RelatedManagermy_entry.authors.all()是一个QuerySet,它返回Author对象。见https://docs.djangoproject.com/en/1.3/ref/models/relations/https://docs.djangoproject.com/en/1.3/topics/db/models/#many-to-many-relationships。 (更新)

+0

我有类条目 内的功能'高清msgtoat(个体经营): #UPDATE msgtoauthor' 所以我想用上面来更新变量功能为每个作者的特定条目。我不能改变这个函数的类。 – melsk

+0

是的,有点。在我这样做之前,我需要查询作者身份证的权利? – melsk

1

如果所有作者得到相同的值,你可以这样做:

entry.authors.update(msgtoauthor='Hey there!') 
2

试试这个:

class Entry(models.Model): 
    blog = models.ForeignKey(Blog) 
    headline = models.CharField(max_length=255) 
    body_text = models.TextField() 
    pub_date = models.DateTimeField() 
    authors = models.ManyToManyField(Author) 

    def msgtoat(self, message): 
     self.authors.update(msgtoauthor=message) 

例如,要更新条目:

entry.msgtoat('Hello')