ModelChoiceField - получить request.user.username

Мне нужно выбрать пользователя в форме по request.user.username и сохранить в базе данных. Здесь у меня есть код forms.py

class Send(forms.ModelForm):
  sender = forms.ModelChoiceField(queryset=User.objects.order_by('username')

Вот models.py, где я собираюсь сохранить данные о пользователе:

class SendM(models.Model):
 sender = models.ForeignKey(User, null=True, blank=False, on_delete=models.CASCADE)

А вот views.py, где я получаю данные

def form_create(request):
   if not request.user.is_anonymous:
        form = Send(request.POST or None, initial={'sender': request.user.username})

   if request.method == "POST":
      if form.is_valid():
         send = SendM(sender=User.objects.get(username=form.cleaned_data['sender']))
      send.save()
      return redirect("/")

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

Большое спасибо!!!

Начальным значением в форме является ссылка на пользователя, а не имя пользователя, потому что вы используете ModelChoiceField. Я сейчас не помню, является ли это экземпляром модели (initial={'sender': request.user}) или первичным ключом модели (initial={'sender': request.user.pk}) .

После form.is_valid() нет необходимости снова получать пользователя из базы данных. Вам просто нужно вызвать метод save на форме. Все остальное сделает Django.


if form.is_valid():
    send = form.save()
Вернуться на верх