2015-09-17 2 views
0

Я работаю над созданием веб-сайта с профилями пользователей, но у меня возникла проблема. Я очень смущен тем, как работает User в Django. Вот мой текущий код: В Models.pyDjango User and AbstractBaseUser

from django.contrib.auth.models import User 


class Profile(models.Model): 
    user = models.OneToOneField(User) 
    username = models.CharField(max_length=20) 
    first_name = models.CharField(max_length=20) 
    last_name = models.CharField(max_length=20) 
    biography = models.TextField(max_length=1000) 
    votes = models.IntegerField(blank=True, null=True) 
    timestamp = models.DateTimeField(auto_now_add=True, 
     auto_now=False, null=True 
     ) 

    def __unicode__(self): 
     return unicode(self.user.username) 

class Post(models.Model): 
    user = models.OneToOneField(settings.AUTH_USER_MODEL) 
    title = models.CharField(max_length=100, blank=False) 
    body = models.TextField(blank=False) 
    description = models.CharField(max_length=100, blank=True) 
    date = models.DateTimeField(auto_now_add=True, auto_now=False) 
    keywords = models.CharField(max_length=100, blank=True) 
    votes = models.IntegerField(blank=True, null=True) 

    def __unicode__(self): 
     return unicode(self.title) 

В моей settings.py у меня есть AUTH_USER_MODEL = 'models.Profile' набор.

Теперь, когда я захожу на сайт Admin и создаю новый Profile, у него есть поле User, где я должен выбрать пользователя. User, который я должен выбрать, это мой суперпользователь Django Admin, который я создал с помощью python manage.py createsuperuser. Чтобы создать новый User целиком и не привязываться к суперпользователю Django Admin, должен ли я делать пользовательский User вместо AbstractBaseUser? Я следил за некоторыми учебниками, и они, похоже, используют метод auth.User. Я здесь что-то не так?

ответ

1

вам лучше использовать ForeignKey в Post Model, так как у одного человека может быть много сообщений, не так ли?

class Profile(models.Model): 
    user = models.OneToOneField(User, related_name="user_profile") 
    ... 

class Post(models.Model): 
    user = models.ForeignKey(Profile, related_name="user_posts") 

и вы не установите AUTH_USER_MODEL, вы установите его, если вы хотите настроить бэкенд аутентификации, я думаю, что вы хотите использовать Джанго встроенной в модель пользователя для аутентификации. поэтому нет необходимости в AUTH_USER_MODEL в настройках

с моделями выше, вы можете получить доступ профиля в представлениях, как это:

user_profile = request.user.user_profile 
user_profile.keywords 
... 

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

+0

Спасибо за информацию! Кажется, он работает так, как мне нужно. Теперь на странице администратора отображается имя пользователя каждого объекта «Профиль», а не имя суперпользователя. Когда я создаю нового пользователя, создавая объект «Профиль» через мои представления, они не отображают «Пользователь», выбранный на их странице администратора. Вместо этого он пуст, но я все еще могу выбрать «Пользователь» из раскрывающегося списка. Это мне не кажется правильным. – tear728

+0

@ tear728, если вы создаете новый профиль пользователя, ясно, что новый профиль еще не имеет отношения к пользовательской модели, а значит и пустое раскрывающееся меню. – doniyor

+1

Да, я просто подумал об этом, когда я пошел, и попытался добавить новый профиль к пользователю с профилем, уже назначенным ему, и это не позволило мне. еще раз спасибо – tear728

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