2011-07-12 40 views
0

我有兩個外鍵的模型來創建多對多的關係 - 我不是在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(categoryText='short') 
>>>s=StoryCat(category=c) 

當我嘗試這個我得到的錯誤「AttributeError的:‘NoneType’對象有沒有屬性‘標題’我怎樣才能做到這一點

+1

我很想知道爲什麼'StoryCat'上的字段是'null = True,blank = True'嗎? –

+0

主要是因爲我是新來的Django - 我會解決他們,因爲我正在學習 - 現在是其中一個學習時刻 - 謝謝 – afshin

回答

0

你在解釋執行的線都沒有疑問? - 他們被實例化新對象(但不保存它們)

想必你的意思是這樣的:

>>>c=Category.objects.get(categoryText='short') 
>>>s=StoryCat.objects.get(category=c) 
+0

這接近我想完成 - 當我這樣做時,我得到關於多行返回的錯誤。我需要做的就是獲取查詢返回的id值。 – afshin

1

I would like to query for a category like 'short', and retrieve all the unique keys to all stories returned.

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')