2010-10-21 2 views
1

Mes modèles ressemblent à ceci:Comment puis-je modifier la manière dont le champ de clé étrangère est affiché dans l'admin django?

Location: 
    state 
    county 
    city 
    street 

Building: 
    name 
    location = ForeignKey(Location) 

Maintenant, dans l'admin, lors de l'édition du Building, je veux avoir la possibilité de modifier l'emplacement de cette façon: how the admin should look like

Ainsi, il est comme une ligne , mais avec Location dans Building, pas la manière oposite.

+0

Peut-être que vous pouvez montrer un scrennshot et le code admin.py que vous utilisez en ce moment? Peut-être que vous les enregistrez dans le mauvais sens, non? – kovshenin

+0

@kovshenin: Le problème est que vous ne pouvez pas définir un formulaire en ligne pour l'emplacement si la clé étrangère définit une relation N: 1 entre le bâtiment et l'emplacement. –

Répondre

0

Votre problème est probablement plus facile à résoudre si vous maintenez une relation un-à-un entre le bâtiment et l'emplacement. Par exemple, en sous-classant le bâtiment de l'emplacement ou en intégrant les champs de localisation dans les bâtiments. Je suppose que peu de bâtiments partagent le même emplacement. Donc, vous n'économiserez pas beaucoup en utilisant une clé étrangère à des emplacements de toute façon. Cette clé étrangère rend également l'édition compliquée. En particulier, si vous souhaitez des champs d'entrée distincts pour les composants d'emplacement. Normalement, vous devez d'abord rechercher des correspondances dans des emplacements existants avant de créer une nouvelle entrée de lieu. L'exemple suivant permet de créer une sous-classe de zones de construction et de localisation de groupes et d'emplacements dans deux sections du formulaire d'administration. Votre application nécessitera probablement quelques ajustements bien.

Le modèle:

class Location(models.Model): 
    state = models.CharField(max_length=30) 
    county = models.CharField(max_length=30) 
    city = models.CharField(max_length=30) 
    street = models.CharField(max_length=30) 

class Building(Location): 
    name = models.CharField(max_length=120) 

Le formulaire admin:

class BuildingAdmin(admin.ModelAdmin): 
    fieldsets = (
     ('Building', { 
      'fields': ('name',) 
     }), 
     ('Location', { 
      'fields': (('state', 'county', 'city', 'street'),) 
     }), 
    ) 

admin.site.register(Building, BuildingAdmin) 
Questions connexes