2014-09-02 2 views
0

Я пытаюсь создать профиль пользователя, который основывается на пользователе Django по умолчанию. Я пытаюсь расширить пользователь по умолчанию с дополнительными полями, как это:Расширение Django по умолчанию

class MyMember(models.Model): 
    user = models.OneToOneField(settings.AUTH_USER_MODEL) #not sure about this 
    birthday = models.DateField() 

    USERNAME_FIELD = 'user'  #how to use username field from default user?   
    REQUIRED_FIELDS = ['birthday',] 

    def __unicode__(self): 
     return self.username 

Но я получаю эту ошибку: объект «менеджер» не имеет атрибута «get_by_natural_key»? Зачем? Я также хотел бы USERNAME_FIELD быть именем пользователя от пользователя по умолчанию. Как?

+0

Читайте документы здесь: https://docs.djangoproject.com/ru/dev/topics/auth/customizing/#specifying-a-custom-user-model –

+0

зависит также от версии Django. Причина от 1.5+ вы можете изменить свою модель пользователя :) – aRkadeFR

ответ

1

Вот класс UserProfile модель я использую, чтобы расширить User модель в моем демо-сайте:

#Private function required by image field. 
def _get_upload_file_name_w_sub_dir(instance, filename): 
    return "uploaded_files/{0}{1}_{2}".format("profile_pic/", (str(time()).replace(".", "_"), filename)) 

class UserProfile(models.Model): 
    # This line is required. Links UserProfile to a User model instance. 
    # related_name is so you can reference *this* model as "user.profile" 
    # instead of "user.userprofile" 
    user = models.OneToOneField(User, related_name="profile") 

    # The additional attributes we wish to include. 
    year_discovered = models.IntegerField(blank=True, 
     verbose_name="Year you discovered Billy Joel's music/became a fan") 
    profile_picture = models.ImageField(upload_to=get_upload_profile_pic_file_name, 
     blank=True, null=True) 

    # Override the __unicode__() method to return out something meaningful! 
    def __unicode__(self): 
     return self.user.username 

Вот в official documentation на расширение пользовательской модели.

+0

Спасибо. Я попробую. Какую версию ты используешь? – user3199840

+0

Версия 1.7c2 .. – aliteralmind

+0

Надеюсь, это поможет. Пожалуйста, подумайте о том, чтобы принять участие в голосовании и принять это, если это произойдет, хорошо? Удачи! – aliteralmind

1

Так вы можете расширить модель default Django User. Вы бы хотели использовать ForeignKey, а затем вы можете использовать точечную нотацию для доступа к полям модели User.

Здесь:

from django.contrib.auth.models import User 

class MyMember(models.Model): 
    user = models.ForeignKey(User) 
    birthday = models.DateField() 

    def __unicode__(self): 
     # the default "username" field in the django user model 
     return self.user.username 
+0

Спасибо, но это не сработает. Это приводит к нескольким ошибкам. Сначала запрашивается имя_пользователя и поля required_fields. Затем хочу, чтобы я указал на settings.AUTH_USER_MODEL (потому что auth.User был заменен?) И затем просить уникальное имя_пользователя. И после всего этого «неверный литерал для int() с базой 10:« ... – user3199840

+0

Какую версию django вы используете? –

+0

Извините, забыл упомянуть об этом. Это 1.6.1 – user3199840

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