indianLeo
indianLeo

Reputation: 153

django model Form data not getting saved to database

I am trying to save form data to DB but it is not getting saved. I am not getting any errors as well. Here is my form.py:

def create_lead(request):
    form = LeadForm()
    if request.method == 'POST':
        form = LeadForm(request.POST)
        print(form.data)
        if form.is_valid():
            first_name = form.cleaned_data['first_name']
            last_name = form.cleaned_data['last_name']
            age = form.cleaned_data['age']
            city = form.cleaned_data['city']
            country = form.cleaned_data['country']
            email = form.cleaned_data['email']
            status = form.cleaned_data['status']
            agent = form.cleaned_data['agent']
            avatar = form.cleaned_data['avatar']
            lead = Lead(
                first_name=first_name,
                last_name=last_name,
                age=age,
                city=city,
                country=country,
                email=email,
                status=status,
                agent=agent,
                avatar=avatar
            )
            lead.save()
        return redirect('/all')
    return render(request, 'create.html', {'form': LeadForm})

I even tried to create a model directly as mentioned here: HTML form data not saved in database - django but it did not help.

def create_lead(request):
    form = LeadForm()
    if request.method == 'POST':
        form = LeadForm(request.POST)
        print(form.data)
        if form.is_valid():
            first_name = form.cleaned_data['first_name']
            last_name = form.cleaned_data['last_name']
            age = form.cleaned_data['age']
            city = form.cleaned_data['city']
            country = form.cleaned_data['country']
            email = form.cleaned_data['email']
            status = form.cleaned_data['status']
            agent = form.cleaned_data['agent']
            avatar = form.cleaned_data['avatar']
            Lead.objects.create(
                first_name=first_name,
                last_name=last_name,
                age=age,
                city=city,
                country=country,
                email=email,
                status=status,
                agent=agent,
                avatar=avatar
            )
        return redirect('/all')
    return render(request, 'create.html', {'form': LeadForm})

Here is my forms.py:

class LeadForm(forms.ModelForm):
    class Meta: 
        model = Lead
        fields = '__all__'

Here is the model:

class Lead(models.Model):
    lead_status = (
        ('Potential', 'Potential'),
        ('Prospect', 'Prospect'),
        ('Negotiation', 'Negotiation'),
        ('Converted', 'Converted'),
        ('Failed', 'Failed')
    )

    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    age = models.IntegerField(default=0)
    city = models.CharField(max_length=25, null=True)
    country = models.CharField(max_length=30, null=True)
    email = models.EmailField(max_length=50, null=True)
    agent = models.ForeignKey('Agent', on_delete=models.CASCADE, null=True)
    status = models.CharField(max_length=15, choices=lead_status, null=True)
    avatar = models.ImageField(null=True, upload_to='media')

    def __str__(self):
        return self.first_name

Here is the HTML

<form method="POST" action="." enctype="multipart/form-data">
    {% csrf_token %}
    {{form.as_p}}
    <button type="submit">Submit</button>
</form>

Upvotes: 0

Views: 191

Answers (1)

Ga&#235;tan GR
Ga&#235;tan GR

Reputation: 1398

You are saving a file, so you have to add request.FILES to your form as well.

form = LeadForm(request.POST, request.FILES)

Upvotes: 1

Related Questions