Добавление метода в профили 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()