2009-09-24 6 views
2

J'ai un modèle Django -.select_related ne se joignent pas colonnes marquées avec nulll = True

class NoticedUser(models.Model): 
    user = models.ForeignKey(User, null=False) 
    text = models.CharField(max_length=255, null=True) 
    photo = models.ForeignKey(Photo, null=True, blank=True) 
    article = models.ForeignKey(Article, null=True, blank=True) 
    date = models.DateTimeField(default=datetime.now) 

Lorsque je tente de récupérer les objets, soit avec NoticedUser.objects.all() select_related(), requête résultant ne contient pas de jointures avec les tables 'photo' et 'article'. J'ai regardé les sources de Django et il semble que les champs contenant null = True devraient aboutir à la jointure gauche au lieu de la jointure interne, mais je n'ai pas trouvé pourquoi les jointures gauches appropriées n'apparaissent pas dans la requête résultante. Cela provoque des requêtes supplémentaires lors de l'affichage des objets associés, ainsi que l'impossibilité d'effectuer des jointures personnalisées pour les tables 'photo' et 'article' utilisées dans notre projet.

En fait, apparaissent seulement pour se joint à des champs avec null = False, mais je ne peux pas changer les définitions des champs.

Comment puis-je ajouter des jointures pour les champs avec null = True à la requête résultante? La version de Django que j'utilise est 1.0.2.

Merci.

Répondre

4

Il ne suit pas ces relations par défaut lors de l'utilisation select_related() sans paramètre. Vous devez spécifier explicitement les noms:

NoticedUser.objects.all().select_related('article', 'photo') 
Questions connexes