Как мне автоматически заполнить поля в Django? - PullRequest
13 голосов
/ 05 января 2009

У меня есть модельный Вопрос с полем с именем ИД пользователя , прежде чем задать вопрос, нужно войти в систему, я хочу при сохранении захватить идентификатор пользователя, вошедшего в систему, и назначить его. к идентификатору пользователя модели Question.

Обратите внимание, что в моей форме не отображается идентификатор пользователя, т. Е. В модели Вопросов я объявил идентификатор пользователя следующим образом:

Вопрос класса (models.Model): ... userid = models.ForeignKey (пользователь, editable = false) ...

Как назначить идентификатор пользователя, вошедшего в систему, для модели Вопроса ИД пользователя ?

Ответы [ 4 ]

11 голосов
/ 05 января 2009

Ваш код может выглядеть так:

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

    #...
2 голосов
/ 19 января 2010

Эта запись в блоге (от Джеймса Беннетта) может оказаться полезной и для вас ... она предлагает способ сделать почти то, что вам нужно.

0 голосов
/ 26 декабря 2013

Для более свежего - и, вероятно, для обновления - ресурса, я рекомендую официальную документацию Django. Именно этот пример пробился в раздел методов ModelAdmin документации администратора: https://docs.djangoproject.com/en/1.6/ref/contrib/admin/#modeladmin-methods

Если вы похожи на меня, у вас будет соблазн просто взять этот пример и запустить, но вы могли бы выиграть, если бы замедлились, потратили несколько минут на чтение, а затем внедрили - я бы, конечно, ... 1004 *

Обратите внимание, что я указал на 1.6, но в правом нижнем углу страницы находится динамический селектор, который позволяет вам выбрать свою версию. (Эти потрясающие документы подталкивают меня к Django из Rails!)

0 голосов
/ 05 января 2009

Следует иметь в виду, что вы не можете получить доступ к объекту запроса (и, следовательно, к текущему пользователю) из ваших моделей, не взломав ограничения дизайна django.

Поэтому из Django не работают такие хитрые уловки, как автоматическое заполнение полей, таких как create_by и updated_by. Вы должны установить такие поля вручную в своих представлениях, как показано на @ Daevaorn.

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