Reputation: 4299
my Save button does not save the user entered data into the database in a django form, where is the problem?
models.py
class Cemetery(models.Model):
id = models.AutoField(primary_key=True)
name=models.CharField(verbose_name="Cemetery Name",max_length=100)
city=models.CharField(max_length=30)
zipcode=models.CharField(max_length=5)
date_created=models.DateTimeField(editable=False, auto_now_add=True)
date_modified= models.DateTimeField(editable=False, auto_now=True)
created_by=models.ForeignKey('auth.User')
def __str__(self):
return str(self.id) +'-' + self.name + ' - ' + self.city
forms.py
class CemeteryForm(forms.ModelForm):
class Meta:
model=Cemetery
fields=('name','city','zipcode',)
views.py
def cemetery_add(request):
if request.method=="POST":
form=CemeteryForm(request.POST)
if form.is_valid():
cemetery=form.save(commit=False)
cemetery.name=request.name
cemetery.city=request.city
cemetery.zipcode=request.zipcode
cemetery.created_by=request.user
cemetery.date_created=timezone.now()
cemetery.save()
return redirect('cemetery_list')
else:
form=CemeteryForm
return render(request,'heaven/edit_cemetery.html',{'form':form})
template
{% extends 'heaven/base.html' %}
{% block content %}
<!-- Edit Cemetery -->
<h2>New Cemetery</h2>
<form method="POST" class="cemetery-form">{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="save btn btn-default">Save</button>
</form>
{% endblock %}
when I push the save button, this is the error I receive: AttributeError at /cemetery_add/ 'WSGIRequest' object has no attribute 'name'
Upvotes: 0
Views: 4896
Reputation: 4299
This one worked, I had an authentication problem, since my login session was expired I could not save:
def cemetery_add(request):
if request.method=='POST':
form=CemeteryForm(request.POST)
if form.is_valid():
cemetery=form.save(commit=False)
cemetery.name=request.POST.get('name')
cemetery.city=request.POST.get('city')
cemetery.zipcode=request.POST.get('zipcode')
cemetery.date_created=timezone.now()
if request.user.is_authenticated:
cemetery.created_by=request.user
else:
return login(request)
cemetery.save()
return redirect('cemetery_list')
else:
form=CemeteryForm
return render(request,'heaven/edit_cemetery.html',{'form':form})
Upvotes: 0
Reputation: 43300
In your form, you're looking up values directly on the request
request.name
You need to look in the form's cleaned data
form.cleaned_data.get('name')
Although, this isn't actually needed since the value is already set from the bound form.
If you really want to use the post data then it would be found in the POST dictionary
request.POST.get('name')
In short, ignore resetting these values and just add the fields you need
cemetery=form.save(commit=False)
cemetery.created_by=request.user
cemetery.date_created=timezone.now()
cemetery.save()
Upvotes: 2