Вопрос о доступе Django и сохранении пользовательского иностранного ключа в моей модели


person Community    schedule 14.03.2011    source источник
comment
Я искал решение этой проблемы. Мой пользователь вошел в систему, у меня настроен внешний ключ, но он выдает ошибку Cannot assign None: "MyModel.user" does not allow null values.   -  person    schedule 17.03.2011


Ответы (1)


Учитывая, что вы отметили это django-admin, я предполагаю, что вы хотите сохранить User, который изменяет объект через интерфейс администратора. (Вы не можете сделать это в методе сохранения вашей модели, потому что он не обязательно имеет доступ к объекту User - например, что, если вы сохраняете объект из интерфейса оболочки?)

Чтобы сделать это в админке Django, просто переопределите метод save_model вашего ModelAdmin:

class PostAdmin(admin.ModelAdmin):
    def save_model(self, request, obj, form, change):
        obj.user = request.user
        obj.save()

admin.site.register(Post, PostAdmin)

Конечно, вам нужно добавить ForeignKey с именем user в вашу модель, чтобы это работало...

person DrMeers    schedule 15.03.2011
comment
Я понимаю. Итак, как люди сохраняют пользователя в своих моделях, если есть внешний ключ пользователя? - person ; 15.03.2011
comment
Вам просто нужно добавить user = models.ForeignKey(User) к вашей модели. Тогда приведенный выше код должен работать нормально. - person DrMeers; 15.03.2011
comment
Я согласен, но это из интерфейса администратора. Есть ли простой способ сделать это из моего приложения, используя django auth. - person ; 15.03.2011
comment
Только в том случае, если у вас есть доступ к объекту запроса, и в этом случае решения не намного проще, чем исходная ссылка, которую вы разместили, - модельная форма, которая сохраняет ссылку на запрос и извлекает пользователя из него при сохранении. - person DrMeers; 15.03.2011
comment
Я искал решение этой проблемы. Мой пользователь вошел в систему, у меня настроен внешний ключ, но он выдает ошибку Cannot assign None: "MyModel.user" does not allow null values. - person ; 17.03.2011
comment
Где/как вы сохраняете свой объект? В админке, используя ModelAdmin с save_model как описано выше? Если в другом месте, пожалуйста, опубликуйте свой код. - person DrMeers; 17.03.2011
comment
Я не могу правильно разместить код, поэтому вот документ Google... goo.gl/CdLsZ. ... Я не использую его в разделе Admin или ModelAdmin. Я хочу, чтобы мой веб-сайт сохранял пользователей, которые размещали сообщения, если они вошли в систему. - person ; 17.03.2011
comment
Нельзя ли отправить текущего вошедшего пользователя в модель перед вызовом save()? - person ; 17.03.2011
comment
@ User007: нет такой вещи, как текущий вошедший в систему пользователь - в настоящее время могут быть зарегистрированы сотни пользователей, это зависит от того, кто из них сделал запрос, поэтому вам нужен объект запроса. - person DrMeers; 17.03.2011