Как реализовать несколько форм для одного шаблона - PullRequest
0 голосов
/ 03 октября 2019

Я новичок в Джанго. У меня есть несколько форм для разных расчетов (и т. Д. Form1, Form2, Form3, ...) на моей странице блога. Каждое сообщение в блоге (post / 1) будет иметь кнопку на странице со ссылкой для открытия определенного шаблона формы (post_form.html) для этого сообщения (например, post / 1 / form /) с формой в нем. (Пост1 - Форма1, Пост2 - Форма 2 и т. Д.)

Может ли кто-нибудь помочь с логикой реализации этого? Как лучше настроить URL, модели и формы?

models.py

class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    date_posted = models.DateTimeField(default=timezone.now)
    category = models.ForeignKey(Category , on_delete=models.CASCADE, default='Concrete')
    author = models.ForeignKey(User , on_delete=models.CASCADE)
    image = models.ImageField(default='default.jpg', upload_to='calc_pics')
    formId = models.IntegerField()

class L_section_prop_calc(models.Model):
    name = models.CharField(max_length=100, unique=True)
    tf = models.DecimalField(max_digits=5, decimal_places=3)
    tw = models.DecimalField(max_digits=5, decimal_places=3)
    height = models.DecimalField(max_digits=5, decimal_places=3)

urls.py

path('post/<int:pk>/', PostDetailView.as_view(), name='post-detail'),

forms.py

class Calc_L_Section_Prop_Form(forms.ModelForm):
class Meta:
    model = L_section_prop_calc
    fields = ['tw','tf','height']

Я не знаю, нужно ли мне создавать модель для каждой формы. Есть ли лучший способ?

Thx

1 Ответ

0 голосов
/ 04 октября 2019

Вот что я предполагаю, поскольку ваш вопрос немного сложен для чтения. У вас есть Post объекты, каждый из которых имеет связанный Calc_L_Section_Prop_Form объект. Вы хотите иметь ссылку со страницы /post/1/ на страницу с формой для соответствующей Calc_L_Section_Prop_Form.

Если это так, то я бы так и поступил.

Добавьте поле на вашу Calc_L_Section_Prop_Form модель, чтобы подключить его к вашему сообщению. Если для каждого сообщения в блоге будет только один расчет, вы можете использовать OneToOneField. С остальными вашими моделями все в порядке.

models.py

...

class L_section_prop_calc(models.Model):
    post = models.OneToOneField(Post, models.CASCADE)
    ...

Создайте представление для обработки формы для расчетов.

views.py

from django.shortcuts import get_object_or_404

...

class CalcUpdateView(generic.UpdateView):
    fields = ['tw','tf','height']
    model = L_section_prop_calc

    def get_object(self):
        return get_object_or_404(
            self.get_queryset(),
            post__pk=self.kwargs['pk'],
        )

Наконец, добавьте еще path для использования этого представления.

urls.py

    ...
    path('post/<int:pk>/form/', CalcUpdateView.as_view(), name='calc-update'),
...