gpt4 book ai didi

python - 表单保存不会将用户添加到模型

转载 作者:行者123 更新时间:2023-12-04 15:22:30 24 4
gpt4 key购买 nike

我有一个 django 模型和 ModelForm,但是当我创建一个新主体时,一切正常,除了没有创建用户。所有 post.user 属性均不返回。我正在使用 contrib.auth 来登录用户,这与我的 html user.is_authenticated 作品中一样工作

我尝试使用:

form.user=request.user
form.save()

没用。

任何帮助将不胜感激

模型.py

from django.db import models
from datetime import datetime
from django.contrib.auth.models import User
from django.urls import reverse
# Create your models here.

class Post(models.Model):
body = models.TextField(max_length=140)
timestamp = models.DateField(db_index=True, default=datetime.utcnow)
user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)

class Meta:
ordering = ['-timestamp']

def __repr__(self):
return '<Post {}>'.format(self.body)

def get_absolute_url(self):
return reverse('post', args=[str(self.id)])

Forms.py

from django.forms import ModelForm
from .models import Post
from django.core.exceptions import ValidationError

class PostForm(ModelForm):
def clean_body(self):
data = self.cleaned_data['body']
if len(data) > 140:
raise ValidationError('More than 140 characters')
return data
class Meta:
model = Post
fields = ['body']

views.py

from django.contrib.auth.decorators import login_required
from django.urls import reverse
from django.core.paginator import Paginator
from django.shortcuts import redirect, render
from .models import Post
from .forms import PostForm
from django.contrib.auth.models import User
# Create your views here.

@login_required
def index(request):
'''deal with post method first'''
if request.method == 'POST':
form = PostForm(request.POST)
if form.is_valid():
form.save()
return redirect(reverse('index'))

else:
form = PostForm

posts = Post.objects.all()
paginator = Paginator(posts, 3)
page_number = request.GET.get('page')
page_obj = paginator.get_page(page_number)
context = {
'form':form,
'page_obj':page_obj
}
return render(request, 'index.html', context=context)

最佳答案

一个form没有user,你应该修补包裹在form中的.instance,所以:

@login_required
def index(request):
'''deal with post method first'''
if request.method == 'POST':
form = PostForm(request.POST)
if form.is_valid():
<b>form.instance.user = request.user</b>
form.save()
return redirect('index')
# …

您可能想使用 auto_now_add=True parameter对于时间戳:

class Post(models.Model):
body = models.TextField(max_length=140)
timestamp = models.DateField(db_index=True, <b>auto_now_add=True</b>)
user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)

# …

Note: It is normally better to make use of the settings.AUTH_USER_MODEL [Django-doc] to refer to the user model, than to use the User model [Django-doc] directly. For more information you can see the referencing the User model section of the documentation.

关于python - 表单保存不会将用户添加到模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63002590/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com