Reputation: 335
I have created a form that takes 2 inputs from a user and I want to add current date-time and currently logged in user when I receive user inputs in the POST method.
Help me to write a view to edit the form. In the below code I am not able to assign value to blog_author.
models.py (I am accepting blog_name and blog_details from user)
class blogs(models.Model):
blog_name = models.CharField(max_length=100,blank=False,null=False)
blog_details = models.TextField(blank=False,null=False)
blog_author = models.CharField(max_length=100,blank=True,null=True)
blog_created_at = models.DateTimeField(auto_now=True)
forms.py #with only two fields
class blogForm(forms.ModelForm):
class Meta:
model = blogs
fields = ('blog_name','blog_details')
views.py #validation of form
def create_blog(request):
if request.method == 'POST':
form = blogForm(request.POST)
if form.is_valid():
form.save(commit=False)
form.cleaned_data['blog_author'] = request.user
form.save()
form = blogForm()
context = {"form":form}
return render(request,'create_blog.html',context)
Upvotes: 1
Views: 210
Reputation: 4803
Your error is in this line:
form.cleaned_data['blog_author'] = request.user
returns a User
object.
However,
blog_author = models.CharField(max_length=100,blank=True,null=True)
is a CharField
.
You either must change blog_author
to a ForeignKey if you wish to save the User
instance or you must replace request.user
with request.user.username
, which returns a string of the username of the user which can go in your CharField.
Full code with the request.user.username option
:
def create_blog(request):
if request.method == 'POST':
form = blogForm(request.POST)
if form.is_valid():
form.save(commit=False)
form.cleaned_data['blog_author'] = request.user.username
form.save()
form = blogForm()
context = {"form":form}
return render(request,'create_blog.html',context)
Edit based on chat
def create_blog(request):
if request.method == 'POST':
form = blogForm(request.POST)
if form.is_valid():
blog = form.save()
blog.refresh_from_db()
blog.blog_author= request.user.get_username()
blog.save()
form = blogForm()
context = {"form":form}
return render(request,'create_blog.html',context)
Upvotes: 1