2010-07-31 6 views
0

Я новичок в Python & Django. Я хочу разрешить пользователям создавать новые объекты и для каждого объекта, которые будут связаны с текущим пользователем. Итак, я думал, что буду использовать общий метод create_object - только я не могу разобраться, как лучше всего это сделать, поэтому он прост и безопасен.Связанные с созданием Django объекты с пользователями

Вот моя модель:

class Book(models.Model): 
    user = models.ForeignKey(User, related_name='owner', 
     editable=False) 

    title = models.CharField(max_length=200, 
     help_text='A title for this entry') 

    author = models.CharField(max_length=200) 

Это очень простая модель - пользователи могут ввести название книги и автор, и поле «пользователя» устанавливаются как неизменяемые. Когда объект создается, я хочу, чтобы в поле пользователя было значение текущего пользователя.

Могу ли я сделать это с помощью общего метода create_object? Какой здесь лучший подход? Я не хочу использовать скрытое поле в форме, поскольку оно явно небезопасно.

Благодаря

ответ

2

Я думаю, что это не представляется возможным с общей точки зрения (я мог бы придумать какой-нибудь способ сделать это, но это было бы гораздо более сложным, чем это стоит - с помощью сигналов, глобалам и промежуточного слоя). Вы должны написать свой собственный вид, который будет обрабатывать создание объекта Book с помощью ModelForm. Читайте об этом here и here (Django docs).

Кроме того, я думаю, вы поняли, что related_name параметр делает - теперь, учитывая некоторый экземпляр пользователя, вам придется написать:

books = user.owner.all() 

, чтобы получить список книг этого пользователя. Было бы лучше, либо оставить related_name без изменений (по умолчанию relatedmodelname_set, в данном случае: user.book_set.all()) или изменить его на что-то более значимое, как "books", который позволит вам написать:

books = user.books.all() 

и получить то, что вы хотите ,

+0

Спасибо. Я не был уверен, есть ли простой способ сделать это, но я просто сделаю новое представление. Спасибо за разъяснение параметра related_name. – Roger

Смежные вопросы