Добавление метода в профили Django

Я расширил модель User в Django, используя профили. Как вы знаете, создание нового пользователя не создает новый профиль, связанный с этим пользователем, поэтому нам нужно добавить вспомогательный метод, что-то вроде этого:

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    field_to_be_updated = models.DateTimeField(auto_now_add=True)

User.profile = property(lambda u: UserProfile.objects.get_or_create(user=u))

Это прекрасно работает, но я хотел бы иметь возможность вызывать метод, скажем, update_a_field в классе UserProfile таким образом, чтобы я мог сделать User.objects.all[0].profile.update_a_field() Или что-то в этом роде.

Я пытался создать менеджер для класса UserProfile безрезультатно. Он просто не распознает методы, которые я прикрепляю к классу. Кажется, что UserProfile не является обычной моделью в том смысле, что UserProfile.objects не может принять ее...

Итак, как я могу добавить методы для обновления экземпляра UserProfile? Должен ли я добавить метод в модель User и затем получить доступ к UserProfile таким образом?

1 ответ

Решение

Я не уверен точно, почему, но мой опыт:

НЕ РАБОТАЕТ

user.profile.field = "value"
user.profile.save()

РАБОТАЕТ

profile = user.profile
profile.field = "value"
profile.save()
Другие вопросы по тегам