Джанго несколько Inlineformset_factory. Использование одной "дочерней" модели и нескольких родительских модулей в одной форме

Я пытаюсь создать один экземпляр формы, используя несколько ссылок на внешние ключи из одной модели. Я довольно новичок в Django, поэтому я не совсем уверен, как это реализовать. Документы дают только одну ссылку на внешний ключ для использования inlineformset_factory. Причиной такого большого количества ссылок на FK является то, что каждая ссылочная таблица имеет свои собственные поля auto_update и auto_update_now, которые необходимо обновлять отдельно, поэтому я думаю, что они должны оставаться такими же! Открыты для любых предложений. Спасибо!

    class HiringPlan(models.Model):
    """
    SHORTLISTED = 'sht'
    FIRST_INTERVIEW = 'inp'
    SECOND_INTERVIEW = 'inp'
    THIRD_INTERVIEW = 'inp'
    OFFER = 'off'
    ACCEPTED = 'acc'
    WITHDRAWN = 'wtd'
    """

STATUS_CHOICES = (
    ('Added', 'Added'),
    ('Assigned Role', 'Assigned Role'),
    ('Shortlisted', 'Shortlisted'),
    ('In Process', 'In Process'),
    ('Rejected', 'Rejected'),
    ('Offered', 'Offered'),
    ('Accepted', 'Accepted'),
    ('Withdrawn', 'Withdrawn'),
    ('Started', 'Started'),
    ('Exited', 'Exited'),
)
role_plan = models.ForeignKey(
    'RolePlan.RolePlan',
    on_delete=models.CASCADE,
)
status = models.CharField(
    default=None,
    max_length=15,
    choices=STATUS_CHOICES
)
status_date_change = models.DateTimeField(auto_now=True, null=True, blank=True)
shortlisted = models.ForeignKey('Shortlisted', on_delete=models.CASCADE, null=True, blank=True,
                                related_name='candidate_shortlisted')
first_interview = models.ForeignKey('FirstInterview', on_delete=models.CASCADE, null=True, blank=True,
                                    related_name='candidate_first_interview')
second_interview = models.ForeignKey('SecondInterview', on_delete=models.CASCADE, null=True, blank=True,
                                     related_name='candidate_second_interview')
third_interview = models.ForeignKey('ThirdInterview', on_delete=models.CASCADE, null=True, blank=True,
                                    related_name='candidate_third_interview')
offer = models.ForeignKey('Offer', on_delete=models.CASCADE, null=True, blank=True,
                          related_name='candidate_offer')
accepted = models.ForeignKey('Accepted', on_delete=models.CASCADE, null=True, blank=True,
                             related_name='candidate_accepted')
withdrawn = models.ForeignKey('Withdrawn', on_delete=models.CASCADE, null=True, blank=True,
                              related_name='candidate_withdrawn')
candidate_has_hiring_plan = models.ManyToManyField('AddCandidates.Candidate',
                                                   through='CandidateHasHiringPlan')

def get_absolute_url(self):
    return reverse('hiring-plans:view-hiring-plans')

def __str__(self):
    return "%s %s" % (self.role_plan.code, self.role_plan.role)

class Meta:
    ordering = ('role_plan',)

forms.py

     FirstInterviewFormSet = inlineformset_factory(FirstInterview, 
    HiringPlan,
                                          fk_name='first_interview', 
    fields=('first_interview',), extra=1)

    SecondInterviewFormSet = inlineformset_factory(SecondInterview,                         
    HiringPlan,
                                           fk_name='second_interview',         
    fields=('second_interview',), extra=1)

    ThirdInterviewFormSet = inlineformset_factory(ThirdInterview, 
    HiringPlan,
                                          fk_name='third_interview', 
    fields=('third_interview',), extra=1)

    OfferFormSet = inlineformset_factory(Offer, HiringPlan,
                                 fk_name='offer', fields=('offer',), 
    extra=1)

    AcceptedFormSet = inlineformset_factory(Accepted, HiringPlan,
                                    fk_name='accepted', fields= . 
    ('accepted',), extra=1)

    WithdrawnFormSet = inlineformset_factory(Withdrawn, HiringPlan,
                                     fk_name='withdrawn', fields= . 
  ('withdrawn',), extra=1)


    # https://micropyramid.com/blog/how-to-use-nested-formsets-in- 
   django/class 

    BaseChildFormset(BaseInlineFormSet):
    pass

    def add_fields(self, form, index):
        super(BaseChildFormset, self).add_fields(form, index)

    # save the formset in the 'nested' property
    form.nested = FirstInterview(
        instance=form.instance,
        data=form.data if form.is_bound else None,
        files=form.files if form.is_bound else None,
        prefix='YYY-MM-YY' % (
            form.prefix,
            FirstInterview.get_default_prefix()),
        extra=1)

0 ответов

Другие вопросы по тегам