Django форма фильтр пк из нескольких связанных таблиц
Я изучаю Django и работаю над проектом по управлению спортивной командой
Я пытаюсь создать форму с несколькими компонентами:
- Некоторые описательные поля из модели PersonnelFormation с выбором группы персонала (newtest на скриншоте): OK
- На основе выбранной группы получить список необходимых игроков из модели PersonnelGroup (в примере должно быть QB, Z): текущий выпуск
- Для каждого игрока список доступных позиций из PersonnelRolePosition (например, Gun/Center для QB, Wing для Z) с набором форм согласно моим исследованиям .
Текущее состояние формы в режиме просмотра редактирования
В настоящее время у меня проблемы с шагом 2:
Я не могу правильно настроить фильтр на форме. Я использую self.instance.id, чтобы показать концепцию, но мне нужен способ получить pk связанной группы персонала? Я вижу в таблице, что поле есть, но не знаю, можно ли получить доступ к нему из формы. PostgreSQL скриншот соответствующей таблицы
При создании формы, как я могу обработать шаг 2? Нужно ли мне сохранить форму, чтобы получить доступ к значению выбранной группы?
Упрощенные модели (некоторые поля символов опущены):
class PersonnelRole(models.Model):
"""Model used to describe the role of a player."""
name = models.CharField(max_length=20, blank=False, unique=True)
description = models.CharField(max_length=200, blank=True, null=False)
class PersonnelRolePosition(models.Model):
"""Model used to describe the on-field position on a role basis."""
role = models.ManyToManyField('PersonnelRole', blank=False)
x_offset = models.FloatField(verbose_name='horizontal offset', blank=False)
y_offset = models.FloatField(verbose_name='vertical offset', blank=False)
class PersonnelGroup(models.Model):
"""Model used to describe sets of (eleven) players."""
name = models.CharField(max_length=30, blank=False, unique=True)
code_name = models.CharField(max_length=30, unique=True)
requirements = models.ManyToManyField('PersonnelRole', blank=False)
class PersonnelFormation(models.Model):
"""Model used to describe the on-field position of sets of (eleven) players."""
code_name = models.CharField(max_length=30, unique=True)
personnel_group = models.ForeignKey('PersonnelGroup', on_delete=models.CASCADE, blank=False)
positions = models.ManyToManyField('PersonnelRolePosition', blank=False)
forms.py
class FormationForm(forms.ModelForm):
players = forms.CharField()
class Meta:
model = PersonnelFormation
fields = (
'code_name',
'personnel_group'
)
def __init__(self, *args, **kwargs):
super(FormationForm, self).__init__(*args, **kwargs)
qs = PersonnelGroup.objects.filter(pk=self.instance.id )
self.fields['players'].initial = qs.values_list('requirements__name', flat=True)
#requirements shown in the screenshot, changed to players to avoid confusion with field name
views.py
class FormationUpdate(LoginRequiredMixin, generic.UpdateView):
form_class = FormationForm
template_name = 'playbook/formations_update.html'
context_object_name = 'formation'
def get_success_url(self):
return reverse('playbook:formations-list')
def get_queryset(self):
user_filter = self.request.user.pk
return PersonnelFormation.objects.filter(user=user_filter)
class FormationCreate(LoginRequiredMixin, generic.CreateView):
model = PersonnelFormation
form_class = FormationForm
template_name = 'playbook/formations_create.html'
def get_success_url(self):
return reverse('playbook:formations-list')
def form_valid(self, form):
group = form.save(commit=False)
group.user = self.request.user
group.save()
return super(FormationCreate, self).form_valid(form)
Шаблон простой формы.as_p
Большое спасибо за помощь!