Фильтр Django Admin, где уже существует связанный OnetoOne - PullRequest
0 голосов
/ 07 февраля 2019

Я хочу реализовать фильтр для моего набора запросов в django-admin, чтобы избежать появления сообщения об ошибке «уже существует»

Таблица представляет собой таблицу основного сопоставления, в которой идентификаторы сопоставляются из разных источников.

Идентификаторы могут быть сопоставлены только один раз, таким образом, большинство полей являются 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 не имеет никакого эффекта

1 Ответ

0 голосов
/ 07 февраля 2019

разобрались

При фильтрации нужного объекта я не фильтровал правую клавишу

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