kod
kod

Reputation: 13

Django FormModel fields not found

Currently, the template is only generating the Submit button without any input fields. Also, if I change fields = "all" to fields= ["email","name"] it tells me that these fields do not exist.

Model:

class NewsletterSubscriber(models.Model):
    email = EmailField(required=True, label='Email')
    name = CharField(required=True, label='Name')

Serializer:

class SubscribeForm(forms.ModelForm):
    class Meta:
        model = NewsletterSubscriber
        fields = "__all__"

View:

def subscribe(request):
    form = SubscribeForm()
    if request.method == 'POST':
        form = SubscribeForm(request.POST)
        if form.is_valid():
            form.save()
            # redirect to a success page
    return render(request, 'subscribe.html', {'subscribeForm': form})

Template:

<form action="{% url 'subscribe' %}" method="post">
    {% csrf_token %}
    {{ subscribeForm.as_p  }}
    <input type="submit" value="Subscribe">
</form>

Upvotes: 0

Views: 68

Answers (2)

kod
kod

Reputation: 13

Solved.

Wrong:

class NewsletterSubscriber(models.Model):
    email = EmailField(required=True, label='Email')
    name = CharField(required=True, label='Name')

Correct:

class NewsletterSubscriber(models.Model):
    email = models.EmailField(required=True, label='Email')
    name = models.CharField(required=True, label='Name')

Upvotes: 0

Tarquinius
Tarquinius

Reputation: 1928

Give this a try:

class NewsletterSubscriber(models.Model):
    email = EmailField(required=True)
    name = CharField(required=True)
class SubscribeForm(forms.ModelForm):
    class Meta:
        model = NewsletterSubscriber
        fields = ['email', 'name']
        labels = {'email': 'Email', 'name': 'Name'}

Instead of fields you could instead also go for exclude which would then obviously list the fields that you do not want to show up.

All these attributes you can put in the Meta class: Modelformfactory

Upvotes: 1

Related Questions