这应该非常简单,我可以不考虑传统的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值?
答案 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)