Элегантный способ хранить анонимных пользователей с никами в Django? - PullRequest
4 голосов
/ 03 января 2011

У меня есть простая модель Post в моем приложении django:

class Post(models.Model):
    category = models.CharField(max_length=10, choices=choices)
    message = models.CharField(max_length=500)
    user = models.ForeignKey(User, editable=False)

Я хотел бы реализовать функцию, позволяющую анонимным пользователям создавать сообщения с псевдонимами.К сожалению, django не позволяет вам сохранить экземпляр AnonymousUser как иностранный ключ для класса Post.

Я думал о добавлении «фиктивной» записи пользователя в базу данных, которая представляет анонимного пользователя (id = 0или отрицательное число, если это возможно), которое будет использоваться для всех сообщений без пользователя.И если оно присутствует, поле имени, которое можно обнулять, будет использоваться для представления псевдонима анонимного пользователя.

Это решение кажется мне немного хакерским.Есть ли более чистое, более эффективное решение?

Ответы [ 4 ]

6 голосов
/ 03 января 2011

Если вы можете идентифицировать новых пользователей по некоторой информации о сеансе, вы можете просто создать обычные учетные записи пользователей, pro forma , если можно так выразиться - с флагом, идентифицирующим их как изменчивых (это может привести к некоторому регулярному обслуживанию очистка).

Если во время сеанса пользователь действительно хочет зарегистрироваться, вы можете повторно использовать учетную запись пользователя на своей стороне, и пользователь может сохранить все свои данные на своей.

Как прокомментировал @slacy и ответил @Dominique; вместо того, чтобы кататься самостоятельно, взгляните на существующие проекты, например, это:

1 голос
/ 03 января 2011

Не проверено, но это может помочь: https://github.com/danfairs/django-lazysignup

0 голосов
/ 26 декабря 2014

Я недавно в Джанго. Один из друзей сказал мне не использовать ForeignKey, с помощью CharField все в порядке. ForeignKey работает медленнее, чем CharField, так как имеет некоторую проверку информации о пользователе.

0 голосов
/ 03 января 2011

Вы можете добавить blank=True и null=True к User ForeignKey и установить его на None, если пользователь является анонимным.Вам просто нужно где-то хранить никнейм.

...