2011-07-13 3 views
1

Cela devrait être très simple, je pouvais le faire sans penser à SQL traditionnelle, mais ne peut l'obtenir avec des modèles Django!Comment accéder au modèle avec seulement deux clés étrangères?

J'ai un modèle avec deux clés étrangères pour créer plusieurs à plusieurs - Je n'utilise pas beaucoup de champ beaucoup dans 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 

Je voudrais interroger pour une catégorie comme « courte », et récupérer toutes les clés uniques de toutes les histoires retournées.

c = Category.objects.get (categoryText = 'courte')

s = StoryCat.objects.get (catégorie = c)

quand j'essaye ceci j'obtiens une erreur que plusieurs rangées ont été retournées. Je veux juste récupérer les valeurs d'id mais je ne semble pas être capable de comprendre comment faire cela.

Comment puis-je obtenir les valeurs id qui sont retournés?

+0

FWIW, la notation commune pour les noms de champs, utiliser des traits de soulignement, c'est-à-dire 'category_text' au lieu de' categoryText', voir [PEP8] (http://www.python.org/dev/peps/pep-0008/). Je sais que Django peut convertir automatiquement les underscores en espaces et les capitaliser de manière appropriée lorsqu'il génère automatiquement des noms de champs dans des endroits tels que les formulaires de modèles et l'admin. Je ne suis pas sûr comment/si il gère camelcase. Bonne chance –

Répondre

2

« plusieurs lignes ont été renvoyés » parce que vous utilisez plutôt que de se filtrer sur l'un ou l'autre des requêtes.

S'il n'y a qu'une seule catégorie courte essayer correspondant:

c = Category.objects.get(categoryText='short') 
s = StoryCat.objects.filter(category=c) 

S'il est possible qu'il y ait plus d'une catégorie essayer quelque chose comme ce qui suit:

# 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) 
Questions connexes