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()