2017-09-25 4 views
0

Je ne suis qu'un débutant en python. J'ai créé deux services d'administration appelés enfant et parent.Menu déroulant admin personnalisé dans Django python

Parent - Tableau

id

Nom

Type

enfant - Tableau

pid

Type

cname

Dans les deux services, la colonne "type" sera affichée dans la liste déroulante. Lors de la création d'une entrée pour parent, si le "type" n'a pas été choisi dans le service parent. qu'ID unchosen Parent de l'devraient montré au service des enfants dans la liste déroulante Désolé pour mon mauvais anglais

# models.py 

class Parent(models.Model): 

    id = models.IntegerField(blank=False) 

    type = models.ForeignKey(
     'self', 
     on_delete=models.CASCADE, 
     blank=True, 
     null=True, 
     related_name='parent_set') 
    name = models.CharField(max_length=20) 


class Child(models.Model): 

    pid = models.IntegerField(max_length=30, blank=False) 
    Type = models.ForeignKey(
     Parent, 
     null=True, 
     on_delete=models.CASCADE, 
     related_name='child_set') 
    pname = models.CharField(max_length=20) 

Toute aide serait appréciée

+0

Êtes-vous à la recherche d'exclure certains des 'parents' dans la liste déroulante lors de la création d'un enfant? –

+0

Dans le menu déroulant, le type de parent non sélectionné doit figurer dans le service enfant. –

+0

Signification, lors de la création du parent. Je ne choisirai pas le type dans le menu déroulant. Mais, j'ai besoin de lister ce parent comme type dans le menu déroulant du service de l'enfant. –

Répondre

0

ont pas testé. S'il vous plaît vérifier si cela fonctionne.

class ChildAdmin(admin.ModelAdmin): 
    def render_change_form(self, request, context, *args, **kwargs): 
     chosen_types = Parent.objects.all().values_list('type', flat=True) 
     context['adminform'].form.fields['Type'].queryset = Parent.objects.all().exclude(pk__in=chosen_types) 
     return super(ChildAdmin, self).render_change_form(request, context, args, kwargs)   
+1

J'ai trouvé ma réponse. J'ai utilisé Parent.objects.filter. Merci à toi –