如何只用两个外键访问模型?

时间:2011-07-13 18:49:06

标签: django django-models

这应该非常简单,我可以不考虑传统的SQL,但不能用Django模型来实现它!

我有一个带有两个外键的模型来创建多对多的关系 - 我在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(Poll,null=True,blank=True)
    category = models.ForeignKey(Category,null=True,blank=True)  

    def __unicode__(self):
      return self.story

我想查询类似'short'的类别,并检索返回的所有故事的所有唯一键。

  
    
      

C = Category.objects.get(categoryText = '短')

             

S = StoryCat.objects.get(类别= C)

    
  

当我尝试这个时,我收到一个返回多行的错误。我实际上只想检索id值,但我似乎无法弄清楚如何做到这一点。

如何获取返回的id值?

1 个答案:

答案 0 :(得分:2)

“返回多行”是因为您正在使用get而不是对其中一个或两个查询进行过滤。

如果只有一个匹配短片的类别:

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

如果可能有多个类别尝试类似以下内容:

# get just ids via values_list
cids = Category.objects.filter(categoryText='short').values_list('id', flat=True)

s = StoryCat.objects.filter(category__id__in=cids)