Как автоматически заполнить внешний ключ на форме из нескольких страниц в 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 или любые другие способы, которые вы знаете.