
[英]How to make Django Form repeatedly submit in background while user is filling it in?
[英]Django - how to automatically associate user while filling the form
所以我正在尝试创建博客应用程序。 在此,我创建了一个模型 Post,其中包含用户提交的内容。 我还创建了一个表单来获取用户对 Post 的输入。 我面临的问题是我无法在获取输入时自动关联引用的登录用户 ID。
模型.py:
from django.db import models
from django.contrib.auth.models import User
from django.urls import reverse
class Post( models.Model):
title = models.CharField( max_length = 225 )
title_tag = models.CharField(max_length=225)
author = models.ForeignKey( User , on_delete=models.CASCADE )
body = models.TextField()
为了暂时解决这个问题,我找到了一个选项,可以让用户从用户名列表中进行选择
表单.py
from django import forms
from .models import Post
class PostForm ( forms.ModelForm):
class Meta :
model = Post
fields = {'title','title_tag', 'author','body'}
widgets = {
'title' : forms.TextInput( attrs= {'class' : 'form-control', 'placeholder':'please write yur title'}),
'title_tag' : forms.TextInput(attrs={'class': 'form-control'}),
'author': forms.Select(attrs={'class': 'form-control'}),
'body': forms.Textarea(attrs={'class': 'form-control'}),
}
视图.py:
class CreatePost ( CreateView):
model = Post
form_class = PostForm
template_name= 'create_post.html'
#fields = '__all__'
def create_post(request) :
form = Post (request.POST or None)
context = {
'form_': form
}
if request.method == 'POST':
if form.is_valid():
publish = form.save(commit=False)
#publish.author = request.user
publish.save()
return render(request, 'create_p.html', context )
我使用类 CreatePost 来呈现这个视图。 它有效,但问题是我必须选择手动关联 Post 对象的用户。 我试图使用函数 create_post 绕过它,但渲染它给我“RelatedObjectDoesNotExist Post has no author”错误。
能否请您指导我这个问题谢谢!
用户必须先登录。 然后你可以像这样覆盖form_valid
方法。
class CreatePost(LoginRequireMixin, CreateView):
model = Post
form_class = PostForm
template_name= 'create_post.html'
#fields = '__all__'
def form_valid(self, form):
form.instance.author = self.request.user
return super(CreatePost, self).form_valid(form)
此外,您需要从表单中删除字段author
作为必填字段,因为您是在视图中自己处理此字段。
class PostForm(forms.ModelForm):
class Meta :
model = Post
fields = ['title','title_tag','body']
首先,用户必须与模型相关联,所以尝试
from django.db import models
from django.contrib.auth.models import User
from django.urls import reverse
类邮政(模型。模型):
user = models.ForeignKey(User, on_delete=models.CASCADE,related_name="user",null=True)
title = models.CharField( max_length = 225 )
title_tag = models.CharField(max_length=225)
author = models.ForeignKey( User , on_delete=models.CASCADE )
body = models.TextField()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.