2016-06-11 154 views
1

我有一個叫農夫模型延伸「用戶」,再加上它有一個像出生日期,電話號碼等一些附加的屬性Django的擴展用戶模型

如何使用用戶的屬性,如名字,姓氏指在農民模式?或者,也許我可以在Farmer表中的管理界面上顯示它們?我不想在我的Farmer模型中再次使用first_name,last_name,因爲它是重複的。基本上,農民也是一個用戶,他們的姓氏相同。

我嘗試了下面的方法,當我嘗試添加新農夫時,出現"Field 'first_name' doesn't have a default value"錯誤。

class Farmer(models.Model): 
user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True) 
birth_date = models.DateField(auto_now=False) 
address = models.TextField(max_length=500) 
phone_regex = RegexValidator(regex=r'^\+?1?\d{9,15}$', message="Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed.") 
phone_number = models.CharField(validators=[phone_regex], blank=True, max_length=20) # validators should be a list 

#This helps to print in admin interface as e.g. Thomas the farmer, without this in admin interface you see farmer object which is difficult to distinguish 
def __str__(self): 
    print(self.user.first_name)    # __unicode__ on Python 2 
    return "%s" % (self.user) 

我的admin.py

class UserAdmin(admin.ModelAdmin): 
    list_display = ('id','username' ,'email', 'is_active', 'date_joined', 'is_staff','last_login',) 

admin.site.unregister(User) 
admin.site.register(User, UserAdmin) 

admin.site.register(Farmer) 
+0

何時發生此錯誤,在遷移期間還是在創建新農場的過程中? – tobltobs

+0

創建新農民時,遷移成功。然後我刪除了所有現有的用戶,創建了新的超級用戶並在之後創建了一個用戶。 – Nitish

+0

您在模型中引用的'User'是'django.contrib.auth.User'嗎?你是否通過UserAdmin或FarmerAdmin創建新用戶? – tobltobs

回答

1

這真的很容易得到相關的模型出現在列表中顯示但涉及一些打字。

class FarmerAdmin(admin.ModelAdmin): 

    def get_username(self): 
     return self.user.username 

    def get_is_staff(self): 
     return self.user.is_staff 

    list_display = (get_username, get_is_staff, ....) 

    def get_queryset(self, request): 
     return super(FarmerAdmin, self).get_queryset(request).select_related('user') 

注意,修改該查詢集是必需的,否則各行的管理員列表視圖會導致查詢。您的__str__方法具有相同的效果。

0

類農民(用戶):

這將使就是工作

+0

這基本上從我的管理界面中刪除了Farmer,而是再次給用戶和農民的屬性再次鏈接到用戶。這不是我想要的。 – Nitish