Django: включение формы в список - PullRequest
0 голосов
/ 09 июля 2020

Я пытаюсь вставить форму подписки на новостную рассылку в свою базу. html шаблон, который представляет собой список, который отображает предстоящие события и избранные магазины, и каждый раз, когда я отправляю форму, он возвращает 'HTTP-ошибку 405'

Любая помощь с этим будет оценена

Views.py

from django.shortcuts import render
from django.views.generic import ListView, TemplateView
from events.models import Event
from newsletter.forms import NewsletterSignUpForm
from shops.models import Shop


class HomeListView(ListView):
    template_name = 'core/index.html'

    def get_context_data(self, **kwargs):
        context = super(HomeListView, self).get_context_data(**kwargs)
        context.update({
            'events': Event.get_upcoming_events()[:1], # returns only the first event in the list
            'shops': Shop.objects.all(),
        })
        context['newsletter_form'] = NewsletterSignUpForm()
        return context

    def get_queryset(self):
        return None

forms.py

from django.forms import ModelForm
from .models import Newsletter

class NewsletterSignUpForm(ModelForm):

    class Meta:
        model = Newsletter
        fields = ['email']

Models.py

from django.db import models

class Newsletter(models.Model):
    email = models.EmailField(unique=True)
    date_subscribed = models.DateTimeField(auto_now=False, auto_now_add=True)

    def __str__(self):
        return f'{self.email}'

база. html

<form method="post">
    {% csrf_token %}
    {{ newsletter_form|crispy }}
    <button class="btn btn-primary" type="submit">Sign Up!</button>
</form>

1 Ответ

0 голосов
/ 09 июля 2020

сначала добавьте URL-адрес действия в форму для обработки данных публикации

<form method="post" action="{% url 'submit_url' %}">
    {% csrf_token %}
    {{ newsletter_form|crispy }}
    <button class="btn btn-primary" type="submit">Sign Up!</button>
</form>

urls.py

добавьте URL

path('your_url',views.formSubmit,name='submit_url')

views.py

def formSubmit(request):
    if request.method == 'POST':
        form = NewsletterSignUpForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('your_list_view_url')

или вы можете использовать FormMixin вместе с представлениями на основе классов formmixin с представлениями на основе классов

...