Связывание общих созданных объектов Django с пользователями - PullRequest
0 голосов
/ 31 июля 2010

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

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

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?Какой лучший подход здесь?Я не хочу использовать скрытое поле в форме, так как оно явно небезопасно.

Спасибо

1 Ответ

2 голосов
/ 31 июля 2010

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

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

books = user.owner.all()

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

books = user.books.all()

и получи, что хочешь.

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