2017-09-26 35 views
0

我有两个型号如何连接两个型号,特定的要求

A型

class Affiliate(models.Model): 
    instructor = models.OneToOneField(Profile) 

B型

class Profile(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE) 
    instructor = models.BooleanField(default=False, blank=False) 

我的目标是在我的Django管理显示列表其中instructor = True的个人资料,现在我得到所有的教师,我怎样才能限制这个列表。

class AffiliateAdmin(admin.ModelAdmin): 
    fields = ['instructor'] 

这个工作,但它得到的配置文件的整个列表。我只想要具有instructor = True的配置文件。

说我有以下几点:

Model A - 1 
Model B - 1 
Model B - 2 
Model B - 3 

Model B - 1 and Model B - 3 Have instructor = True 
Model B - 2 has instructor = False 

当我编辑型号A - 从Django管理区,我得到一个配置文件列表链接到1。该列表包含所有三种B型号。

我想列表只包括模型B - 1和B - 3其中instructor = True。

Current Admin list: 
Model B - 1 (instructor = True) 
Model B - 2 (instructor = False) 
Model B - 3 (instructor = True) 

Desired Admin list: 
Model B - 1 (instructor = True) 
Model B - 3 (instructor = True) 

我试图限制关系模型上的配置文件没有成功。

任何帮助表示赞赏。

+0

你在寻找类似过滤器的get_queryset方法:https://docs.djangoproject.com/en/1.11/ref/contrib/admin/#django.contrib .admin.ModelAdmin.list_filter –

+0

不完全我试图限制我可以附加到关联公司的配置文件的类型。我想通过不显示配置文件没有教练=真 –

+0

这样做我不知道如何将它短语,但逻辑会。如果profile.instructor = true显示在附属选择列表中。现在我被迫包括整个列表 –

回答

0

您可以覆盖类ModelAdmin

class AffiliateAdmin(admin.ModelAdmin): 
    fields = ['instructor'] 

    def get_queryset(self, request): 
     qs = super(AffiliateAdmin, self).get_queryset(request) 
     return qs.filter(instructor__instructor=True)