Django设置ModelForm字段,但不将其包含在表单中
在我的应用程序中,我有Django设置ModelForm字段,但不将其包含在表单中,django,forms,Django,Forms,在我的应用程序中,我有Users创建Post对象。每个Post都有一个User class Post(models.Model): user = models.ForeignKey(User, on_delete = models.CASCADE) ... 我想创建一个用于编辑和提交的提交后表单,所以我计划使用Django的ModelForm功能 class PostForm(ModelForm): class Meta: model = Post
User
s创建Post
对象。每个Post
都有一个User
class Post(models.Model):
user = models.ForeignKey(User, on_delete = models.CASCADE)
...
我想创建一个用于编辑和提交的提交后表单,所以我计划使用Django的ModelForm功能
class PostForm(ModelForm):
class Meta:
model = Post
fields = "__all__"
但是,如果我这样做,那么查看表单的人将能够设置帖子作者。我想确保生成的user
字段就是他们。但是,如果我从模型表单中排除user
字段
class PostForm(ModelForm):
class Meta:
model = Post
exclude = 'user'
那么用户将不会在表单提交时设置。我通过制作一个自定义表单和更新post字段来解决这个问题
def submit_view(request):
....
request.POST = request.POST.copy()
request.POST.update({
'user' : request.user.id
})
form = PostForm(request.POST, request.FILES)
....
但是,我失去了自动UI生成和表单验证,这在某种程度上违背了表单
类的目的。有人能告诉我设置用户
字段而不将其包含在表单
中的惯用方法吗 试试这个视图:
def submit_view(request):
form = PostForm(request.POST or None)
if form.is_valid():
new_post = form.save(commit=False)
new_post.user = request.user
new_post.save()
尝试以下视图:
def submit_view(request):
form = PostForm(request.POST or None)
if form.is_valid():
new_post = form.save(commit=False)
new_post.user = request.user
new_post.save()
view.py
from django.views.generic import CreateView
from .models import Post
class PostCreate(CreateView):
model = Post
template_name ="new_Post_form.html"
fields = ['text']
def form_valid(self, form):
object = form.save(commit=False)
object.user = self.request.user
object.save()
return super(PostCreate, self).form_valid(form)
def get_success_url(self):
return "/"
url.py
url(r'^newpost$',views.PostCreate.as_view(),name='post_new',),
new_post_form.html
<form method="post" enctype="multipart/form-data" class="form" action="newpost" id="new-post-form">
<div class="modal-body">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit" />
</div>
{%csrf_令牌%}
{{form.as_p}}
view.py
from django.views.generic import CreateView
from .models import Post
class PostCreate(CreateView):
model = Post
template_name ="new_Post_form.html"
fields = ['text']
def form_valid(self, form):
object = form.save(commit=False)
object.user = self.request.user
object.save()
return super(PostCreate, self).form_valid(form)
def get_success_url(self):
return "/"
url.py
url(r'^newpost$',views.PostCreate.as_view(),name='post_new',),
new_post_form.html
<form method="post" enctype="multipart/form-data" class="form" action="newpost" id="new-post-form">
<div class="modal-body">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit" />
</div>
{%csrf_令牌%}
{{form.as_p}}
在这种情况下,我可以从模型表单中排除
用户
字段吗?是的,如果您不想渲染它,您应该这样做!用户直接存储在模型实例中!谢谢,出于某种原因,我认为它会比这更复杂…在这种情况下,我可以从模型表单中排除用户
字段吗?是的,如果不希望渲染它,您应该这样做!用户直接存储在模型实例中!谢谢,出于某种原因,我认为事情会比这更复杂。。。