Короче говоря, я использую встроенный в Django
Пользователь авторизовался и подумал, что так и будет
легко заполнить мое поле пользователя (
Foreignkey) в моей модели, но это делает
нет.
Это не просто волшебным образом произойдет. Вам придется сделать это. Модели отделены от запроса, так что это может произойти с вашей точки зрения, или с методом модели (возможно, save
), который передается активному пользователю.
Дизайн MVC / MTV отделяет базу данных от логики просмотра / управления. Я не понимаю, какое отношение фреймворк имеет к этому: если вы сами не напишите функциональность, база данных не будет знать, что делать с какой-то таблицей User и текущим вошедшим пользователем (также отделенным от данных). Внедрение этой функциональности также доставит неудобства многим людям ...
В общем, философия python / django: явное лучше, чем неявное.
Теперь решения:
Если вам нужно такое поведение в представлении, для любой формы вы можете написать:
instance = MyForm.save(commit=False) # commit=False prevents DB save.
instance.user = request.user
instance.save()
Вы можете перезаписать метод сохранения в модели, который также принимает необязательный пользовательский аргумент.
def save(self, *args, **kwargs):
user = kwargs.pop(user, None)
self.user = user
super(MyModel, self).save(*args, **kwargs)
mymodel = MyModel()
mymodel.save(user=request.user)