장고 양식 변경

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 가지 작업을 수행해야합니다.

  1. 익명 사용자가 액세스 할 수 없도록 페이지를 보호합니다. LoginRequiredMixin
  2. 필드에서 사용자 제거
  3. 양식이 게시 된 후 제출 된 양식에 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)