2 формы в шаблоне django с использованием cookiecutter-django - PullRequest
0 голосов
/ 11 ноября 2019

Я создаю 2 формы на один шаблон в cookiecutter-django. У меня есть обе формы, работающие над обычным проектом django, но когда я перенес их в cookiecutter-django, формы не работали в шаблоне user_detail.

Это forms.py

class NarrateForm(ModelForm):
    class Meta:
        model = Narrate
        fields = [
            'title',
            'body',
        ]
        exclude = ('status',)


class TranslateForm(ModelForm):
    class Meta:
        model = Translate
        fields = [
            'title',
            'body',
        ]
        exclude = ('status',)

Это views.py форм, которые у меня есть:

class TranslateFormView(FormView):
    form_class = TranslateForm
    template_name = 'user_detail.html'

    def post(self, request, *args, **kwargs):
        add_translation = self.form_class(request.POST)
        add_narration = NarrateForm()
        if add_translation.is_valid():
            add_translation.save()
            return self.render_to_response(
                self.get_context_data(
                    success=True
                )
            )
        else:
            return self.render_to_response(
                self.get_context_data(
                    add_translation=add_translation,
                )
            )

class NarrateFormView(FormView):
    form_class = NarrateForm
    template_name = 'users/user_detail.html'

    def post(self, request, *args, **kwargs):
        add_narration = self.form_class(request.POST)
        add_translation = TranslateForm()
        if add_narration.is_valid():
            add_narration.save()
            return self.render_to_response(
                self.get_context_data(
                    success=True
                )
            )
        else:
            return self.render_to_response(
                self.get_context_data(
                    add_narration=add_narration,
                )
            )

Теперь это представление user_details из cookiecutter-django

class UserDetailView(LoginRequiredMixin, DetailView):

    model = User
    slug_field = "username"
    slug_url_kwarg = "username"


user_detail_view = UserDetailView.as_view()

Это код в шаблонекоторый работает над старым проектом django

<form method="POST" action="#">
    {% csrf_token %}
    {{ add_narration }}
    <button type="submit" name="submit" value="Send Narration">Submit Narration</button>
</form>

<form method="POST" action="#">
    {% csrf_token %}
    {{ add_translation }}
    <button type="submit" name="submit" value="Send Narration">Submit Narration</button>
</form>

Я пытался сделать эту работу уже более 2 часов, но безуспешно.

Ответы [ 2 ]

1 голос
/ 12 ноября 2019

присвойте входным данным разные имена, как показано здесь

<form method="POST" action="#">
    {% csrf_token %}
    {{ add_narration }}
    <button type="submit" name="narrationsubmit" value="Send Narration">Submit Narration</button>
</form>

<form method="POST" action="#">
    {% csrf_token %}
    {{ add_translation }}
    <button type="submit" name="transaltionsubmit" value="Send Narration">Submit Narration</button>
</form>

Затем обработайте их, как показано ниже.

def handleforms(request):
    if request.method =="POST" and "narrationsubmit" in request.post:
        //process
    elif request.method =="POST" and "transaltionsubmit" in request.post:
        //process

Примечание: это для функционального представления. отформатировать его для CBV

1 голос
/ 11 ноября 2019

Возможным решением может быть создание базовой формы (extension django.forms.Form) в файле forms.py, создание полей вручную и модели в дальнейшем в файле views.py.

...