Дочерняя модель внешнего ключа несколько динамических c форм внутри Модели - PullRequest
0 голосов
/ 19 февраля 2020

Ниже перечислены зарегистрированные модели администратора:

models.py

class TestMain(models.Model):
    course = models.ForeignKey(Course, on_delete=models.PROTECT)
    question = models.TextField(max_length=200, unique=True)
    ## If I uncomment below and comment question attr in TestChild it doesnt work
    # answerfk = models.ForeignKey(TestAnswer, related_name="answerfk", on_delete=models.PROTECT)

    class Meta:
        verbose_name = 'Question'
        verbose_name_plural = 'Questions'

    def __str__(self):
        return '{} - QUESTION: {}'.format(self.course, self.question)

class TestChild(models.Model):
    ## If I comment below and uncomment answerfk attr in TestMain it doesnt work
    question = models.ForeignKey(TestMain, related_name="questionfk", on_delete=models.PROTECT)
    answer = models.CharField(max_length=250, default=None)
    correct_answer = models.BooleanField(verbose_name="correct answer", default=False, editable=True)  
    answer_comment = models.CharField(max_length=250, unique=False, default=None)
    internal_comments = models.CharField(max_length=250, unique=False, default=None)
    def __str__(self):
        return '{} ANSWER: {} {}'.format(self.question.question, self.answer, self.correct_answer)

forms.py

from django import forms

class TestMainForm(forms.ModelForm):
  pass

class TestChildForm(forms.ModelForm):
  pass

admin.py

class TestChildInline(admin.TabularInline):
    model = TestChild
    fk_name = "question"
    extra = 0
    def get_formset(self, request, obj=None, **kwargs):
        TestChildInline.form = type(
            'TestChildInlineAlt', (TestChildForm, ), {})
        formset = super(TestChildInline, self).get_formset(request, obj, **kwargs)
        return formset

class TestMainAdmin(admin.ModelAdmin):
    inlines = [TestChildInline, ]

admin.site.register(TestMain, TestMainAdmin)

Цель состоит в том, чтобы иметь форму TestMain и динамическое добавление c нескольких форм для TestChild. Проблема, с которой я сталкиваюсь, заключается в том, что если у меня есть внешний ключ (models.ForeignKey) от TestMain (answerfk) до TestChild (answer attr), тогда строка для TestChildInline выдает ошибку, говорящую, что есть нет внешнего ключа в TestChild для TestMain.

Я хочу иметь fk в TestMain для TestChild, как мне создать форму для TestMain & TestChild, когда TestChild является динамическим c опция ввода нескольких форм - в линию. Я говорю о TestMain-> TestChilds с OneToManyRelation. У меня есть требование выборки TestMain с TestChilds для представления / формы, которым необходимо ввести данные для другой модели под названием TestResults. Элемент TestResults представляет собой данные из обеих данных формы TestMain + TestChilds, которые вводят ее в модель TestResults.

Форма в настоящее время содержит несколько дополнений для таких ответов (TestChild [question -> (models.ForeignKey(TestMain)) ):

enter image description here

...