在我的应用程序中,我有User创建Post对象。每个Post都有一个User
class Post(models.Model):
user = models.ForeignKey(User, on_delete = models.CASCADE)
...
Run Code Online (Sandbox Code Playgroud)
我想创建一个提交后的表单以进行编辑和提交,因此我打算使用Django的ModelForm功能。
class PostForm(ModelForm):
class Meta:
model = Post
fields = "__all__"
Run Code Online (Sandbox Code Playgroud)
但是,如果我这样做,那么查看表单的任何人都可以设置Post作者的身份。我想确保结果user字段是它们。但是,如果我user从ModelForm中排除该字段,
class PostForm(ModelForm):
class Meta:
model = Post
exclude = 'user'
Run Code Online (Sandbox Code Playgroud)
那么将不会在表单提交上设置用户。我通过制作自定义表单和更新post字段来解决此问题
def submit_view(request):
....
request.POST = request.POST.copy()
request.POST.update({
'user' : request.user.id
})
form = PostForm(request.POST, request.FILES)
....
Run Code Online (Sandbox Code Playgroud)
但是后来我失去了自动UI生成和表单验证的功能,这在某些方面违反了Form类的目的。有人能指出我设置user字段的惯用方式Form吗?
试试这个视图:
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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
519 次 |
| 最近记录: |