1

나는 '사용자'확장 농부라는 모델이 플러스 등 생년월일, 전화 번호와 같은 몇 가지 추가 속성이 있습니다장고 확장 사용자 모델

나는 그런 FIRST_NAME으로 사용자의 속성을 사용할 수있는 방법, LAST_NAME은에서 참조하는 파머 모델? 아니면 Farmer 테이블의 내 관리 인터페이스에서 어떻게 표시 할 수 있습니까? 내 농부 모델에서 first_name, last_name을 반복하고 싶지는 않습니다. 근본적으로 파머는 또한 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