2011-07-13 10 views
1

これは本当にシンプルなはずです。伝統的なSQLを考えずにDjangoのモデルを手に入れることができます。2つの外部キーのみでモデルにアクセスする方法は?

私は、多くの関係に多くを作成するには、2つの外部キーを持つモデルを持っている - 私は「短い」などのカテゴリを照会したいジャンゴ

に私は多くの分野に多くを使用していない
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 

をし、返されたすべてのストーリーに固有のキーをすべて取得します。

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

S = StoryCat.objects.get(カテゴリ= C)

私はこれを試すと、複数の行が返されたというエラーが発生します。私は実際にid値を取得したいだけですが、これを行う方法を理解できないようです。

返されるID値はどのようにして取得できますか?

+0

FWIWを、一般的な表記法フィールド名は 'categoryText'ではなく' category_text'のようにアンダースコアを使用します。[PEP8](http://www.python.org/dev/peps/pep-0008/)を参照してください。私は、Djangoがアンダースコアをスペースに自動的に変換し、モデルフォームや管理者などのフィールド名を自動生成するときに適切に資本化することができます。私はキャメルケースをどう扱うかはわかりません。運が良かった –

答えて

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) 
関連する問題