Невозможно вставить значение в базу данных при отправке формы django - PullRequest
1 голос
/ 04 октября 2019

Я создал форму, которая принимает 2 ввода от пользователя, и я хочу добавить текущую дату и время и вошедшего в систему пользователя, когда я получаю пользовательские данные в методе POST.

Помогите мне написать представление для редактирования формы. В приведенном ниже коде я не могу присвоить значение blog_author.

models.py (я принимаю blog_name и blog_details от пользователя)

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 # только с двумя полями

class blogForm(forms.ModelForm):
    class Meta:
        model = blogs
        fields = ('blog_name','blog_details')

views.py # проверка формы

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)

1 Ответ

1 голос
/ 04 октября 2019

Ваша ошибка в этой строке:

form.cleaned_data['blog_author'] = request.user возвращает объект User.

Однако,

blog_author = models.CharField(max_length=100,blank=True,null=True)

является CharField.

Вы должны изменить blog_author на ForeignKey, если хотите сохранитьэкземпляр User или вы должны заменить request.user на request.user.username, который возвращает строку с именем пользователя, которое может быть указано в вашем CharField.

Полный код с 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)

Редактирование на основе чата

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)
...