【发布时间】: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