2017-09-25 186 views
0

我只是一个Python初学者。我创建了两个名为child和parent的管理服务。Django中的自定义管理员下拉菜单python

父 - 表

ID

儿童 - 表

PID

cname

在这两个服务列中,“type”将显示在下拉列表中。 为父级创建条目时,如果在父级服务中未选择“类型”。 那未选中家长的ID应该所示的子业务在下拉 对不起我的英文不好

# 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) 

任何帮助,将不胜感激

+0

您是否正在寻找在创建孩子时排除部分“父母”的下拉菜单? –

+0

在下拉菜单中,未选择类型的父项应列在子项服务中。 –

+0

含义,同时创建父项。我不会在下拉菜单中选择类型。但是,我需要在子服务下拉菜单中将此父级列为类型。 –

回答

0

没有测试过这一点。请检查这是否工作。

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

我找到了我的答案。我已经使用了Parent.objects.filter。谢谢你 –