我有一个带有两个外键的模型来创建多对多的关系 - 我在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(categoryText='short')
>>>s=StoryCat(category=c)
当我尝试这个时我得到错误“AttributeError:'NoneType'对象没有属性'title'。我该怎么做?
答案 0 :(得分:1)
我想查询类似'short'的类别,并检索返回的所有故事的所有唯一键。
c=Category.objects.get(categoryText='short')
story_ids = StoryCat.objects.filter(category=c).values_list('story')
关于你的模特:
类别名称应该是唯一的。并宣布你的多对多关系。
class Category(models.Model):
categoryText = models.CharField(max_length=50, unique=True)
stories = models.ManyToManyField(Story, through='StoryCat')
...
中间表FK字段可以为空是没有意义的。另外我假设同一故事不应该两次添加到同一类别,因此设置一个唯一约束。
class StoryCat(models.Model):
story = models.ForeignKey(Poll)
category = models.ForeignKey(Category)
class Meta:
unique_together = ('story', 'category')
答案 1 :(得分:0)
您在解释器中执行的行不是查询 - 它们实例化新对象(但不保存它们)。
大概你的意思是:
>>>c=Category.objects.get(categoryText='short')
>>>s=StoryCat.objects.get(category=c)