django - 如何使用 CreateView 将用户对象传递到 Modelform

标签 django django-class-based-views modelform

NOT NULL 约束失败:blog_post.author_id

嗨,我对 django 还很陌生,无法修复此错误。

我正在构建一个博客应用程序,我希望作者是当前用户。
我知道我没有正确地将用户对象传递到表单,但我发现的解决方案都不适合我。

提前谢谢您!

models.py

class User(auth.models.User,auth.models.PermissionsMixin):
    def __str__(self):
        return '@{}'.format(self.username)


class Post(models.Model):
    author = models.OneToOneField(User, on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    text = models.TextField()

def get_absolute_url(self):
    return reverse('post_detail',kwargs={'pk':self.pk})

forms.py

class UserForm(UserCreationForm):
    class Meta:
        fields = ('username', 'email', 'password1', 'password2')
        model = get_user_model()

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)


 class PostForm(forms.ModelForm):
     class Meta:
         model = Post
         fields = ('title', 'text',)

views.py

class SignUpView(CreateView):
    form_class = UserForm
    success_url = reverse_lazy('login')
    template_name = 'registration/signup.html'

class PostCreateView(LoginRequiredMixin, CreateView):
    login_url = '/login/'
    redirect_field_name = 'blog/post_detail.html'

    form_class = PostForm
    model = Post

最佳答案

我找到了一个适合我的情况的解决方案,并且与您的@Silas 非常相似。

views.py

class PostCreateView(LoginRequiredMixin, CreateView):
    login_url = '/login/'
    redirect_field_name = 'blog/post_detail.html'
    form_class = PostForm
    model = Post

    def form_valid(self, form):
        self.object = form.save(commit=False)
        self.object.author = self.request.user
        self.object.save()
        return super().form_valid(form)

models.py

class Post(models.Model):
author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
...

关于django - 如何使用 CreateView 将用户对象传递到 Modelform,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54595648/

相关文章:

python - 如何将csv文件保存在django的静态文件夹中?

Django Channels 在 asyncio.sleep 期间无法接收事件?

python - 使用 PK 而不是用户名的选择字段的 ModelForm

Django self.request 未解析的属性(登录)

Django 外键模型表单

python - Django:保存前修改模型的字段

python - 返回缺失值列表?

Django基于类的 View 函数执行顺序

django modelformset_factory 即使在成功创建对象后也能维持先前提交的数据

python - Django:Modelform 在模板中自动创建表单