Как автоматически заполнить внешний ключ на форме из нескольких страниц в Django? (представление на основе функции)

Я разрабатываю сайт, на котором пользователь должен составить форму для начала процедуры покупки оборудования. На моем сайте django я создал несколько моделей с внешним ключом, ссылающимся на главную модель, которая называется MAIN.

В частности, у меня есть эти две модели: MAIN и SPECIFICATIONS. SPECIFICATIONS имеет внешний ключ, который является ID_request, и он соединяется с моделью MAIN.

models.py

class MAIN(models.Model):
 ## attributes

class SPECIFICATIONS(models.Model):
    ID_request = models.ForeignKey(MAIN, on_delete=models.CASCADE)
    Spec = models.CharField(max_length=100, blank=False)
    CliReas = models.CharField(max_length=100, blank=False)
    rif = models.IntegerField(default=0, null=False)
    MinMax = models.CharField(max_length=20, blank=True)

Я структурирую форму на две страницы, где на первой пользователь должен составить некоторые поля модели MAIN. Во второй я хочу заставить пользователя заполнить поля 'Spec', 'CliReas', 'rif', 'MinMax', но я хочу также, чтобы ID_request был автоматически установлен на ранее введенное устройство. Не могли бы вы подсказать, как я могу это сделать?

Я использую представления, основанные на функциях:

views.py

def new_2_4(request):
    form = SpecForm()

    if request.method=='POST':
        form1 = SpecForm(request.POST)
        if form1.is_valid():
            form1.save()
            return redirect('/')

    context={'form1': form1}
    return render(request, 'new_2_4.html', context)

And forms.py

class SpecForm(ModelForm):
    class Meta:
        model = SPECIFICATIONS
        fields = ['ID_request', 'rif','Spec', 'CliReas', 'MinMax']

Заранее благодарю

Вы можете передать параметр запроса при перенаправлении пользователей из основного представления во второе представление.

def main_view(...):
    ...
    main = main_form.save()
    return redirect(f'/spec-view?main_id={main.id}')


def spec_view(...):
    main_id = request.GET.get('main_id')
    return render(request, "spec/template.html", {"main_id":main_id})

И установите параметр main_id в SpecForm внутри шаблона spec в скрытом поле.

Обратите внимание, что этот способ имеет некоторые недостатки, например, пользователи могут изменить URL вручную и попытаться обмануть вас. Вы должны иметь некоторые валидации или проверить их сессии в обоих представлениях, чтобы быть одинаковыми на одном и том же main_id или любые другие способы, которые вы знаете.

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