2017-09-26 71 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)