访问外键指向的对象?查询工作正常 - 如何访问返回的id值?

时间:2011-07-15 22:45:20

标签: django django-models

这很简单,但我在使用Django解决问题时遇到了问题:

我定义了以下模型:

class Story(models.Model):
   title = models.CharField(max_length=200)
   pub_date = models.DateTimeField('date published')

   def __unicode__(self):
      return self.title

class Category(models.Model):
   categoryText = models.CharField(max_length=50)
   parentCat = models.ForeignKey('self',null=True,blank=True)

   def __unicode__(self): 
      return self.categoryText

class StoryCat(models.Model):
    story = models.ForeignKey(Story)
    category = models.ForeignKey(Category)  

    def __unicode__(self):
      return self.story

我正在尝试对StoryCat进行查询以检索具有相同类别的所有故事。我做了以下查询:

c = Category.objects.get(categoryText='short')
s = StoryCat.objects.filter(category=c)

此时我想访问返回类中的值,但我无法弄清楚如何操作。我尝试过的所有东西都会出错。如何获取返回的故事数量和返回故事的ID?

3 个答案:

答案 0 :(得分:0)

你的模特对我来说似乎不对。首先,你创建的是故事和类别之间的ManyToMany关系。这似乎可能对我来说太过分了,但我可能是错的。

如果您确实希望在故事和类别之间创建多种语言,则应对其进行定义:

class Story(models.Model):
    title = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')
    categories = models.ManyToMany(Category, through=StoryCat)

    def __unicode__(self):
        return self.title

从那里你的查询就像:

c = Category.objects.get(id=1)
stories = Story.objects.filter(categories=c)

答案 1 :(得分:0)

您正在做的事情应该有效,但看起来story的{​​{1}}字段有错误模型的外键。您可能需要StoryCat,而不是Story

顺便说一句,一个故事可能只有一个外键Poll(如果一个故事只有一个类别),或many-to-manyCategory的关系(如果一个故事可以属于多个类别)。那么你根本不需要Category模型。

答案 2 :(得分:0)

ids = s.values_list('id', flat=True).order_by('id')  
# [1, 2, 3, ...] 
ids_length = len(ids)