Поле модели ManyToMany, где выбор меняется в зависимости от логического значения

Я относительно новичок в Django, и я пытался найти способ реализовать поле ManyToMany, чей видимый "выбор" в пользовательском интерфейсе изменяется на основе BooleanField, найденного в той же модели.

Например, предположим, что у меня есть модель, которая представляет различные задания, и модель работника, которая имеет множество связей с этой моделью заданий. Предположим также, что существует два типа работников: менеджер и не менеджер, который представлен как BooleanField. Если вы менеджер, у вас есть определенные рабочие места, которых нет у работника, и наоборот.

Я пытаюсь найти способ, не создавая новую таблицу, чтобы она была такой, чтобы задания, перечисленные в многотомных отношениях, зависели от логического значения is_manager. То есть, если бы вы щелкнули "is_manager", в этом списке должны быть перечислены задания, относящиеся к менеджеру, но эти задания, относящиеся к менеджеру, находятся в той же таблице, что и задания, не относящиеся к руководителю, - они будут просто пустыми.

Я искал сквозную область и т. Д., Но все решения, которые я придумаю, кажутся зависимыми от создания другой таблицы. Я уверен, что есть способ сделать это лучше.

Спасибо.

1 ответ

Я предлагаю этот подход:

class MyModelForm(forms.ModelForm):
    class Meta:
        model = MyModel
        fields = ['jobs', 'username']

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        instance = kwargs.get('instance', None)
        if instance is not None:
            if instance.is_manager:
                self.fields['jobs'].queryset = Jobs.objects.filter(manager=True)
            else:
                self.fields['jobs'].queryset = Jobs.objects.filter(manager=False)
Другие вопросы по тегам