2010-04-26 7 views
0

Je ne sais pas si c'est un bug django ou une fonctionnalité mais j'ai un étrange comportement ORM avec MySQL.sur la liste, y compris Aucun

class Status(models.Model): 
    name = models.CharField(max_length = 50) 

class Article(models.Model) 
    status = models.ForeignKey(status, blank = True, null=True) 


filters = Q(status__in =[0, 1,2]) | Q(status=None) 
items = Article.objects.filter(filters) 

ceci renvoie les éléments de l'article, mais certains ont un autre statut que demandé [0,1,2, Aucun]

regardant la requête SQL:

SELECT [..] FROM `app_article` LEFT OUTER JOIN `app_status` ON (`app_article`.`status_id` = `app_status`.`id`) WHERE (`app_article`.`status_id` IN (1, 2) OR `app_status`.`id` IS NULL) ORDER BY [...] 

la partie OR app_status.id IS NULL semble être la cause. si je le change en OR app_article.status_id IS NULL cela fonctionne correctement.

Comment gérer cela?

Thanx.

+0

solution: je crée mon ForeignKey valeur par défaut = 0 rendre inutile de filtrer les valeurs Aucun, et status__in = [0,1,2] fonctionne OK – jujule

Répondre

0

Dans votre attribut de clé étrangère pour le modèle Article, vous référencez status avec un 's' en minuscule. Mais votre modèle Status a un 'S' majuscule. Je ne sais pas où est votre faute de frappe, mais au cas où votre modèle est réellement défini avec une minuscule 's', alors cela pourrait expliquer le SQL étrange que vous voyez.

1

Essayez d'utiliser cette requête à la place:

filters = Q(status__in =[0, 1,2]) | Q(status__isnull=True) 
Questions connexes