zach
zach

Reputation: 1

django models not accept the email?

trying to setting up a small website,a newbie in django . when i create a newsletter setup in django, but the email not saving the admin panel. here is my codes. take a look .

models.py

class Newsletter(models.Model):
email = models.CharField(max_length=200)

def __str__(self):
    return self.email

views.py

def Newsletter(request):
if request.method=="POST":
    email = request.POST.get("email")
    email = email(email=email)
    email.save()
    message.success(request, "email Successfully added")

return render(request, 'index.html')

urls.py

path('newsletter', views.Newsletter, name="newsletter"),

template

<div id="mc_embed_signup" class="subscribe-form subscribe-form-dec subscribe-mrg">
                        <form id="Newsletter" class="validate subscribe-form-style" novalidate=""  name="Newsletter" method="post" action="/Newsletter">
                            
                            <div id="mc_embed_signup_scroll" class="mc-form">
                                <input class="email" type="email" required="" placeholder="Your email address…" name="Newsletter" value="" id="Newsletter">
                                <div class="mc-news" aria-hidden="true">
                                    <input type="text" value="" tabindex="-1" name="Subscribers">
                                </div>
                                <div class="clear">
                                    {% csrf_token %}
                                    <input id="mc-embedded-subscribe" class="button" type="submit" name="subscribe" value="Subscribe">
                                </div>
                            </div>

Upvotes: 0

Views: 66

Answers (1)

Diego Puente
Diego Puente

Reputation: 2004

models.py

class Newsletter(models.Model):
    email = models.CharField(max_length=200)

    def __str__(self):
        return self.email

views.py:

Here maybe you are overriding the name of the view with the name of Model, try this:

from .models import Newsletter


def adding_email_to_newsletter(request):
    if request.method=="POST":
        email = request.POST.get("email")
        Newsletter.objects.get_or_create(email=email)
        message.success(request, "email Successfully added")

return render(request, 'index.html')

the urls.py

path("adding_email_to_newsletter", views.adding_email_to_newsletter, name="adding_email_to_newsletter"),

template:

Here you miss the csrf_token that is required for post submits by default docs and the using of the tag url for best practices.

<div id="mc_embed_signup" class="subscribe-form subscribe-form-dec subscribe-mrg">
    <form id="Newsletter" class="validate subscribe-form-style" novalidate=""  name="Newsletter" method="post" action="{% url 'adding_email_to_newsletter' %}">
    {% csrf_token %}
    
        <div id="mc_embed_signup_scroll" class="mc-form">
            <input class="email" type="email" required="" placeholder="Your email address…" name="Newsletter" value="" id="Newsletter">
            <div class="mc-news" aria-hidden="true">
                <input type="text" value="" tabindex="-1" name="Subscribers">
            </div>
            <div class="clear">
                {% csrf_token %}
                <input id="mc-embedded-subscribe" class="button" type="submit" name="subscribe" value="Subscribe">
            </div>
        </div>
    </form>
</div>

Upvotes: 1

Related Questions