2010-01-27 7 views
1

je 2 modèle djangoadmin django - comment remplacer la vue par défaut <select> pour la clé étrangère?

class Location 
    address = models.CharField(max_length=100) 
    city = models.CharField(max_length=20) 

class Client 
    location = models.ForeignKey(Location) 
    name = models.CharField(max_length=100) 

Et je le admin.py suivant

class ClientAdmin(admin.ModelAdmin): 
fieldsets = [ 
    ('Client Details', {'fields': ['name']}), 
    ('Location Details', {'fields': ['location']}), 
] 


admin.site.register(Client, ClientAdmin) 

Lorsque je tente d'ajouter un client je voudrais avoir un champs « emplacement » modifiable à savoir l'adresse et la ville champs de texte. django par défaut donne une liste .. comment puis-je obtenir les champs des tables qui ont précédé?

de toute façon je peux le faire? Je ne souhaite pas enregistrer la table Location dans l'admin.

grâce

Répondre

2

Vous pouvez mettre une table en ligne pour l'emplacement et utilisez la méthode queryset pour gérer les valeurs de champ. Ainsi, c'est la ideia de la solution:

class LocationInline(admin.StackedInline): 
    model = Location 

    def queryset(self, request): 
     query = ... #your custom query here 
     qs = super(LocationInline, self).queryset(request).filter(query) 
     return qs 


class ClientAdmin(admin.ModelAdmin): 
    inlines = [LocationInline] 
    fieldsets = [ 
     ('Client Details', {'fields': ['name']}), 
    ] 

Edit: Il y a une autre façon de le faire dans django 1.1.

class ClientAdmin(admin.ModelAdmin): 
    fieldsets = [ 
     ('Client Details', {'fields': ['name']}), 
     ('Location Details', {'fields': ['location']}), 
    ] 

def formfield_for_foreignkey(self, db_field, request, **kwargs): 

    if db_field.name = "location": 
     locations = Location.objects.filter(...) #your query 

     kwargs["queryset"] = Location.objects.filter(query) 

    return super(ClientAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs) 

Les documents sont ici: http://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.formfield_for_foreignkey

Il est une vieille question, mais répondre à cela peut aider beaucoup d'autres personnes aussi. Donc, j'espère que ça aide! ;)

Questions connexes