Django: Как отправить имя пользователя текущего пользователя через форму, не вводя его пользователем - PullRequest
0 голосов
/ 17 октября 2019

Я ищу простой способ, чтобы форма django отправляла имя пользователя, вошедшего в систему в данный момент, за кулисами, когда пользователь отправляет форму. Я бы хотел, чтобы это происходило автоматически.

Я видел примеры в других записях stackoverflow, где вызывается функция init . Однако я нахожу этот способ очень грязным и многословным.

Я использую Django 2.2.

1 Ответ

0 голосов
/ 17 октября 2019

Я нашел хороший, стандартный способ сделать это.

Лучшим способом является использование общего представления на основе классов под названием CreateView. Вот ясное объяснение в документах Django:

https://docs.djangoproject.com/en/2.2/topics/class-based-views/generic-editing/#models-and-request-user

Я буду использовать пример из документов в этом объяснении.

Первый: Используйте базовую модель для формы. Здесь нет ничего особенного. (models.py)

from django.contrib.auth.models import User
from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=200)
    created_by = models.ForeignKey(User, on_delete=models.CASCADE)

    # ...

Секунда: Создание представления на основе классов. В этом представлении на основе классов измените «def form_valid (self, form)», как показано в примере с документами ниже. (views.py)

from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic.edit import CreateView
from myapp.models import Author

class AuthorCreate(LoginRequiredMixin, CreateView):
    model = Author
    fields = ['name']

    def form_valid(self, form):
        form.instance.created_by = self.request.user
        return super().form_valid(form)

Третье: Определить URL. Добавьте обычный as_view () для всех представлений на основе классов. (urls.py)

app_name = 'logs'

urlpatterns = [
path('', views.AuthorCreate.as_view(), name = "author_create"),
]

Четвертый: Общее представление на основе классов CreateView имеет имя шаблона по умолчанию, связанное с ним (см. документы django для CreateView ,под атрибутом "template_name"). Имя шаблона по умолчанию соответствует соглашению "authorcreate_form.html". Поэтому создайте HTML-шаблон с именем файла в соответствии с этим соглашением в папке шаблонов приложения. Следующий шаблон работал для меня. (.html)

<form method="POST" action="">
  {% csrf_token %}
  {{ form.as_p }}
  <input type="submit">
</form>

Опять же, это базовый пример, приведенный в Django docs для передачи имени пользователя через форму пользователя. Это хорошо сработало для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...