У меня есть модельный вопрос с полем под названием ID пользователя, прежде чем задать вопрос, нужно войти в систему, я хочу, чтобы при сохранении сохранял идентификатор пользователя, вошедшего в систему, и назначил его идентификатору пользователя модели вопроса.
Обратите внимание, что я не показываю идентификатор пользователя в моей форме, то есть в модели вопроса я объявил идентификатор пользователя следующим образом:
класс Вопрос (models.Model): ... userid = models.ForeignKey (Пользователь, editable = false) ...
Как мне назначить ID пользователя, выполнившего вход в модель вопроса ID пользователя?





Ваш код может выглядеть так:
from django.contrib.auth.decorators import login_required
class QuestionForm(forms.ModelForm):
class Meta:
model = Question
@login_required
def ask(request):
form = QuestionForm(request.POST)
if form.is_valid():
question = form.save(False)
question.userid = request.user
question.save()
#...
Спасибо! Собирался опубликовать аналогичный вопрос, но это решило его
Следует иметь в виду, что вы не можете получить доступ к объекту запроса (и, следовательно, к текущему пользователю) из ваших моделей, не обойдя ограничения дизайна django.
Поэтому такие хитрые приемы, как автоматическое заполнение полей, таких как created_by и updated_by, не работают в Django. Вы должны вручную установить такие поля в своих представлениях, как показано на @Daevaorn.
Запись Этот блог (от Джеймса Беннета) может оказаться полезной и для вас ... она предлагает способ сделать почти то, что вам нужно.
В качестве более свежего ресурса, который, вероятно, будет обновляться, я рекомендую официальную документацию Django. Именно этот пример попал в раздел методов ModelAdmin документации ModelAdmin.
Если вы похожи на меня, у вас возникнет соблазн просто взять этот пример и запустить его, но вам может быть полезно замедлиться, потратить несколько минут на чтение, а затем реализовать - у меня, безусловно, было бы ...
В качестве дополнения, было бы разумнее и яснее называть ваше поле «пользователь», а не «ИД пользователя»; поскольку атрибут фактически относится к объекту User, а не к номеру идентификатора. Django автоматически создаст поле DB с добавленным _id; так что теперь это "userid_id".