Djangoフォームを変更する
Aug 19 2020
ユーザーが新しい投稿のために別のユーザーを選択できないようにコードを調整するにはどうすればよいですか。ログインしたユーザーが自動的に作成者として追加されるようにしたいと思います。
views.pyのフィールド部分をコンテンツフィールドだけに設定しようとしましたが、機能しません
models.py
class post(models.Model):
author = models.ForeignKey(User, on_delete=models.CASCADE)
content = models.CharField(max_length=140)
views.py
class CreatePostView(CreateView):
model = post
fields = '__all__'
template_name = 'users/create.html'
Myform.html
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Login">
</form>
回答
1 bkrop Aug 18 2020 at 23:50
class CreatePostView(CreateView):
model = post
template_name = 'users/create.html'
fields = ['content']
def form_valid(self, form):
form.instance.author = self.request.user
return super().form_valid(form)
MukheemMohammed Aug 18 2020 at 23:51
request.user.username
(または)を使用してユーザー値を手動で挿入できます。これをご覧ください。質問者の回答は下部にあります。
AbhishekBera Aug 19 2020 at 00:37
あなたがする必要がある3つのことがあります:
- 匿名ユーザーがアクセスできないようにページを保護します。
LoginRequiredMixin
- フィールドからユーザーを削除します
- フォームが投稿された後、
form_valid
メソッドを使用して、送信されたフォームに現在のユーザーを入力します
from django.views.generic.edit import CreateView
from django.contrib.auth.mixins import LoginRequiredMixin
class CreatePostView(LoginRequiredMixin, CreateView):
model = Post
fields = ["content"]
template_name = "create.html"
def form_valid(self, form):
form.instance.user = self.request.user
return super().form_valid(form)