amol rane
amol rane

Reputation: 335

Not able to insert value into database on django form submit

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

Answers (1)

Matthew Gaiser
Matthew Gaiser

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

Related Questions