Django форма фильтр пк из нескольких связанных таблиц

Я изучаю Django и работаю над проектом по управлению спортивной командой

Я пытаюсь создать форму с несколькими компонентами:

  1. Некоторые описательные поля из модели PersonnelFormation с выбором группы персонала (newtest на скриншоте): OK
  2. На основе выбранной группы получить список необходимых игроков из модели PersonnelGroup (в примере должно быть QB, Z): текущий выпуск
  3. Для каждого игрока список доступных позиций из PersonnelRolePosition (например, Gun/Center для QB, Wing для Z) с набором форм согласно моим исследованиям
  4. .

Текущее состояние формы в режиме просмотра редактирования

В настоящее время у меня проблемы с шагом 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

    Большое спасибо за помощь!

    Вернуться на верх