2016-06-11 157 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