【问题标题】:Filter Django Admin queryset where related OnetoOne already exists过滤已存在相关 OnetoOne 的 Django Admin 查询集
【发布时间】:2019-07-01 00:41:51
【问题描述】:

我希望在 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',
        )

这是据我所知。

请问有人有代码/帮助吗

我可能不会在显示查询集时过滤掉它,只有在管理中使用表单时

    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 没有效果

【问题讨论】:

    标签: django django-admin django-queryset


    【解决方案1】:

    整理好了

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

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

    【讨论】:

      猜你喜欢
      • 2012-11-18
      • 2011-02-06
      • 2018-09-22
      • 2021-09-27
      • 2016-07-28
      • 2020-08-28
      • 2011-05-19
      • 2021-04-21
      • 2019-02-17
      相关资源
      最近更新 更多