2010-01-19 10 views
2

je besoin d'un widget qui peut faire un foreignkey en lecture seule et aussi devrait afficher la valeur liée à ce champ non l'idwidgets dans django admin

On suppose que

Class A(models.Model): 
    id=models.AutoField(primary_key=True) 
    name=models.CharField(max_length=200) 

    def __unicode__(self): 
    return self.name 

Class B(models.Model): 

    id=models.AutoField(primary_key=True) 
    name=models.ForeignKey(A) 
    description=models.CharField(max_length=200) 

maintenant quand je fais « nom 'de la classe B en lecture seule alors dans l'admin il affiche seulement l'ID valeur correspondante de ce nom dans la classe A.Is widget qui tout là-bas peut rendre le champ en lecture seule et affiche également la valeur non id

Répondre

0

Pour contourner ce problème, vous boîte:

1) ajouter le champ name à raw_id_fields attribut de ModelAdmin puis

2) zone d'entrée Disable identifiant en utilisant JavaScript (en laissant intact l'étiquette de valeur).

Il fera ce que vous demandez à propos de sauf pour le problème de sécurité (si quelqu'un imite la zone d'entrée désactivé/supprimé). Cela peut en outre être traitée par exemple dans clean_name fonction d'une classe héritée de ModelForm.

+0

Je ne veux pas utiliser javascript – ha22109

0

si i afficher la valeur dans les help_text.Means je suis montrant la valeur help_text ainsi que Id

Cela peut être simplement achievd

def get_form(self, request, obj=None): 
    form = super(BAdmin,self).get_form(request, obj) 
    link = obj.id 
    pl=A.objects.get(id=obj.name_id) 
    help_text1 = "%s"%(pl.name) 
    form.base_fields['name'].help_text = help_text1 
    return form 
0

La troisième solution consiste à utiliser le tronc Django qui ajoute la propriété readonly_fields à ModelAdmin. Autre alternative est de patcher votre version actuelle de django avec ce patch: http://code.djangoproject.com/ticket/342

EDIT: J'utilise r12204 django, parce que les révisions ultérieures rompent application django-cm, ce qui est vital pour moi. Je pensais que les révisions ultérieures de django avaient ceci, mais j'ai dû patcher mon installation de django pour montrer des valeurs de clé étrangère pas d'id. Mais il semble que ce comportement persiste encore dans le coffre de django, alors voici le patch: http://dpaste.com/hold/147814/

+0

si j'utilise readonly_field dans le modèle d'administration puis aussi il affichera l'ID pas la valeur. – ha22109

+0

J'ai eu le même problème. J'ai fini par hacker le code d'admin de django pour montrer la valeur de l'objet pour les clefs étrangères - voici mon diff: http://dpaste.com/hold/147814/ – fest

+0

peut décrire peu plus. Je ne peux pas savoir où copier ce code – ha22109