Afficher un champs des ForeignKey dans Django-Admin
Le titre est pas super clair, mais je savais pas trop comment le dire..
Le problème exposé dans ce sujet a été résolu.
Bonjour,
J'ai un modèle Product
qui prend en ForeignKey un modèle Brand
. Ils sont tous les deux enregistrés dans Django-Admin.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 from django.db import models
class Brand ( models . Model ):
name = models . CharField ( max_length = 64 , unique = True )
website = models . URLField ()
slug = models . SlugField ()
description = models . TextField ()
class Product ( models . Model ):
name = models . CharField ( max_length = 64 , unique = True )
brand = models . ForeignKey ( Brand )
description = models . TextField ()
slug = models . SlugField ()
created = models . DateTimeField ( auto_now = False , auto_now_add = True )
edited = models . DateTimeField ( auto_now = True )
J'ai créé un objet Brand
que j'ai appellé Test Brand
. Quand je veux créer un objet Product
, j'ai ma petite liste Brand
qui me propose de sélectionner un objet (la ForeignKey). Seulement, celle-ci m'affiche Brand object
et non le champs name
de l'objet. Comment demander à Django d'indiquer ce nom là ? Je pense qu'une image sera plus clair :
Le problème se trouve au champs Brand
Merci de votre aide !
Je ne connais pas bien Python et Django, mais après quelques recherches j'ai trouvé ça :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 class Invoice ( models . Model ):
person = models . ForeignKey ( Person )
....
class InvoiceAdmin ( admin . ModelAdmin ):
form = MyInvoiceAdminForm
class MyInvoiceAdminForm ( forms . ModelForm ):
person = CustomModelChoiceField ( queryset = Person . objects . all ())
class Meta :
model = Invoice
class CustomModelChoiceField ( forms . ModelChoiceField ):
def label_from_instance ( self , obj ):
return " %s %s " % ( obj . first_name , obj . last_name )
Source : http://stackoverflow.com/questions/6836740/django-admin-change-foreignkey-display-text#answer-6851344
Est-ce que ça correspond à ce que tu cherches ?
La documentation parle un peu de cette fonction label_from_instance
.
Merci de ta réponse. En faite la solution était bien plus simple, il me manquais la méthode __str__
dans mes deux modèles :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 class Brand ( models . Model ):
name = models . CharField ( max_length = 64 , unique = True )
website = models . URLField ()
logo = models . URLField ()
slug = models . SlugField ()
description = models . TextField ()
def __str__ ( self ):
return self . name
class Product ( models . Model ):
name = models . CharField ( max_length = 64 , unique = True )
brand = models . ForeignKey ( Brand )
description = models . TextField ()
image = models . URLField ()
slug = models . SlugField ()
created = models . DateTimeField ( auto_now = False , auto_now_add = True )
edited = models . DateTimeField ( auto_now = True )
def __str__ ( self ):
return self . name
Merci encore et bonne soirée.
Connectez-vous pour pouvoir poster un message.
Connexion
Pas encore membre ?
Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte