2017-09-28 3 views
1

J'ai deux tables: menu et foodtypeDjango ajouter le champ à l'étranger une requête

class Foodtype(models.Model): 
    foodtype_en = models.TextField() 
    active = models.BooleanField() 

    class Meta: 
     managed = False 
     db_table = 'foodtype' 

class Menu(models.Model): 
    title_en = models.TextField() 
    description_en = models.TextField() 
    active = models.BooleanField() 
    id_foodtype = models.ForeignKey(Foodtype, models.DO_NOTHING, 
    id_home = models.ForeignKey('Home', models.DO_NOTHING, db_column='id_home') 

    class Meta: 
     managed = False 
     db_table = 'menu' 

Aussi, je une table combinée généré:

class MenuSerializer(serializers.ModelSerializer): 
    foodtype_en = serializers.CharField() 
    class Meta: 
     model = Menu 
     fields = ('id', 'title_en', 'active') 

Et je suis en train de faire tous les actifs menu enregistrements.

Et je:

menu = Menu.objects.filter(id_home=3,active=True).annotate(foodtype=foodtype) 

Quel est le problème avec ma requête?

+0

Le problème le plus important que je vois est que vous essayez de trop près de la base de données. Laissez Django gérer toute cette clé étrangère, les noms de table et les colonnes pour vous! Vous obtiendrez un code beaucoup plus propre (donc plus facile à déboguer). –

Répondre

1

ressemble à votre besoin source:

foodtype_en = serializers.CharField(source='id_foodtype.foodtype_en')