2015-09-17 64 views
0

我正在創建一個網站與用戶配置文件,但我遇到了一個問題。我很困惑User在Django中的工作原理。這裏是我當前的代碼: 在Models.pyDjango用戶和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是我用python manage.py createsuperuser創建的Django Admin超級用戶。要完全創建新的User並且不能鏈接到Django Admin超級用戶,我應該使用AbstractBaseUser而不是自定義User嗎?我跟着一些教程,他們似乎都使用auth.User方法。我在這裏做錯了什麼?

回答

1

您更好地使用ForeignKey的中郵模式,因爲一個人可以有很多的職位,對吧?

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,您可以設置它,如果你想定製的認證後端,我想你想使用Django內置的用戶模型的認證。所以沒有必要在設置

與上面的模型,您可以訪問個人資料的觀點是這樣AUTH_USER_MODEL

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

,並在管理中,您只需要創建另一個新的Django用戶對象,要能將其分配給新的用戶配置文件對象。

+0

感謝您的信息!它似乎正在工作,因爲我需要。現在,管理頁面顯示每個「Profile」對象的用戶名,而不是「超級用戶」名稱。當我通過我的視圖創建一個'Profile'對象來創建一個新用戶時,他們在其管理頁面中顯示沒有選擇User。相反,它是空白的,但我仍然可以從下拉框中選擇一個「用戶」。這對我來說並不正確。 – tear728

+0

@ tear728如果您創建新的用戶配置文件,很明顯新配置文件還沒有用戶模型關係,因此爲空下拉列表。 – doniyor

+1

是的,我剛剛計算出來,當我去了,並試圖添加新的配置文件的用戶配置文件已分配給它,它不會讓我。再次感謝 – tear728