Django многие-ко-многим на существующей форме

У меня есть 2 таблицы, WorkingHours и Employee, в Employee я определяю workingHours = models.ManyToManyField(WorkingHours). Мой Employee и WorkingHours имеют внешний ключ для User.

Теперь у меня есть какая-то форма для добавления WorkingHour (под некоторым пользователем), и я хочу добавить существующую форму, которую пользователь может выбрать несколькими своими Employees.

Итак, у меня есть существующая форма, которую пользователь может добавить WorkingHours, теперь я хочу добавить опцию, которую он может выбрать между своими Employees. Теперь реализовано только добавление WorkHours для некоторого пользователя, я хочу добавить опцию для выбора между его сотрудниками, и у меня нет никаких идей, как это сделать.

Итак, для лучшего понимания у меня есть пользователь, у которого есть WorkingHours и я хочу добавить, что пользователь может выбрать, какой Employee "работает" на этом WorkingHours. Если все поля не отмечены, я хочу применить к всем Employees что WorkingHour

Я надеюсь, что это не слишком сложно, если это я попытаюсь объяснить больше в комментариях.

Я работаю над существующим проектом, поэтому я не хочу менять много кода.

Thanx

1 ответ

Кажется, я понимаю основную проблему. Вам нужно поле множественного выбора, которое заполняется сотрудниками, связанными с этим пользователем.

Посмотрите здесь несколько деталей/примеров.

В принципе, вы хотите что-то подобное, этот пример не делает все, но я надеюсь, что это начало.

class SimpleForm(forms.Form):
 employees = forms.MultipleChoiceField(required = False, widget=forms.SelectMultiple)

def __init__(self, *args, **kw)
 user = kw.pop('user') # you need to pass user to into this function as a kw argument
 super(SimpleForm, self).__init__(*args, **kw)
 # this asssumes the user as a field (or related field reference) to employees
 # either way somehow you need to execute a query which gets the users employees.
 self.fields['employees'].choices = user.employees.all()

def save(self, *args):
 # if employees is empty set them all to selected

licensed under cc by-sa 3.0 with attribution.