外键不符合预期的模型 - Django

时间:2011-07-12 10:49:22

标签: 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(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'。我该怎么做?

2 个答案:

答案 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)