Поле модели 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)