在相关OnetoOne已经存在的地方过滤Django Admin查询集

时间:2019-02-06 23:31:43

标签: django django-admin django-queryset

我正在django-admin中对我的查询集实施过滤器,以避免出现错误消息“已经存在”

该表是主映射表,其中从不同来源映射ID。

ID只能映射一次,因此大多数字段都是OneToOne。

我已经这样建立了映射模型

class Dim_Fund_Manager_Mapping(Trackable):
    fund_manager_id = models.AutoField(primary_key=True)  
    sharepoint_fund_manager = models.OneToOneField(sharepoint_fund_manager, models.DO_NOTHING)  
    evestment_fund_manager = models.OneToOneField(evestment_fund_manager, models.DO_NOTHING)
    approved = models.BooleanField(default=False)

    class Meta:
        unique_together = (('sharepoint_fund_manager', 'evestment_fund_manager'),)
        verbose_name_plural = 'Fund Manager Mapping Master'

在管理员中创建地图时,我希望这些sharepoint_fund_manager和evestment_fund_manager不再出现在查询集中。

@admin.register(Dim_Fund_Manager_Mapping)
class ChampFundManagerAdmin(admin.ModelAdmin):

    def get_queryset(self, request):
        return qs = super().get_queryset(request).select_related(
            'sharepoint_fund_manager', 
            'evestment_fund_manager',
        )

据我所知,这是迄今为止的事情。

请问有人有什么代码/帮助吗

仅当在admin中使用表单时,我可能不会过滤掉查询集。

    def get_form(self, request, obj=None, **kwargs):
        form = super(ChampFundManagerAdmin, self).get_form(request, obj, **kwargs)
        form.base_fields['sharepoint_fund_manager'].label_from_instance = lambda obj: "{} {}".format(obj.final_publications_fund_manager_id, obj.manager_name)
        form.base_fields['evestment_fund_manager'].label_from_instance = lambda obj: "{} {}".format(obj.evestment_fund_manager_id_bk, obj.manager_name)
        return form

更新

我对添加的get_form方法进行了一些更改

form.base_fields['sharepoint_fund_manager'].queryset = sharepoint_fund_manager.objects.filter(sharepoint_fund_manager_id__isnull=True)

现在什么也没返回,所以我越来越近了,更改为true无效

1 个答案:

答案 0 :(得分:0)

将其分类

过滤正确的对象时,我没有过滤正确的键

form.base_fields['sharepoint_fund_manager'].queryset = sharepoint_fund_manager.objects.filter(dim_fund_manager_mapping__isnull=True)