我有一个名为Farmer的模型,它扩展了“用户”,还有一些额外的属性,如出生日期,电话号码等。
如何在Farmer模型中使用诸如first_name,last_name之类的User属性?或者也许我如何在Farmer表中的管理界面上显示它们?我不希望在我的Farmer模型中再次使用first_name,last_name,因为它是重复的。基本上Farmer也是一个拥有相同first_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 :(得分:2)
让相关模型出现在列表显示中非常容易,但需要输入一些内容。
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__
方法具有相同的效果。
答案 1 :(得分:0)
班级农民(用户):
这将是有效的