【发布时间】:2017-08-13 05:17:46
【问题描述】:
class MemberAdmin(CustomUserAdmin, admin.ModelAdmin):
redirect_model_name = 'memberaccountproxy'
change_form_template = 'loginas/change_form.html'
list_display = ('username', 'email', 'first_name', 'last_name','country', 'gender',
'created_at', 'profile_pic')
search_fields = ('username', 'first_name', 'last_name', 'email',)
add_form = AccountProfileForm
list_filter = (
'gender', 'incomplete', 'email_verified', 'suspended',
'deleted',
)
# profile1 = None
def get_queryset(self, objects):
return Account.objects.filter(usertype=1)
def country(self, obj):
profile1 = Profile.objects.get(account=obj)
if profile1.country:
return profile1.country
return ''
country.admin_order_field = 'country'
我想要实现的是让会员列表页面上的国家/地区列可排序。(目前不是)
问题是我从方法 country 中获取“obj”作为 Account 对象(在 get_queryset() 中定义),然后我使用该 obj 获取另一个 Profile 类型的对象(其中有一个成员变量国家)。但是当我尝试将country方法注册到'admin_order_field'时,它只能获取obj的成员变量(Account类型,其中没有country变量)。
有没有一种方法可以根据 Profile 类中的字段而不是 Account 对国家/地区列进行排序。
class Profile(models.Model):
account = models.OneToOneField(Account)
country = models.ForeignKey('Country', null=True, blank=True, verbose_name='Country Living In', related_name='+')
# name = models.CharField(max_length=40, blank=True)
status = models.ForeignKey('Status', blank=True, null=True, verbose_name='Marital Status', related_name='+')
btype = models.ForeignKey('Btype', blank=True, null=True, verbose_name='Body type', related_name='+')
bheight = models.IntegerField(choices=HEIGHT, blank=True, null=True, verbose_name='Height')
phystatus = models.ForeignKey('EthnicOrigin', blank=True, null=True, verbose_name='Ethnic Origin', related_name='+')
createdby = models.ForeignKey('CreatedBy', blank=True, null=True, verbose_name='Profile Created By',
related_name='+')
...........................
class Account(AbstractBaseUser):
email = models.EmailField(unique=True)
usertype = models.IntegerField(default=1, choices=USER)
username = models.CharField(max_length=40, unique=True)
gender = models.CharField(choices=(('Male', 'Male'), ('Female', 'Female')), max_length=10, blank=True)
phone = models.CharField(max_length=16, blank=True, verbose_name="Mobile No", null=True)
temple = models.ManyToManyField('Account', blank=True, null=True, verbose_name="MatchMaker")
first_name = models.CharField(max_length=40, blank=True, null=True)
last_name = models.CharField(max_length=40, blank=True, null=True)
acc_for = models.ForeignKey('CreatedBy', blank=True, null=True, verbose_name="Profile Created For")
country_code = models.ForeignKey('CountryCode', max_length=40, blank=True, null=True)
............................................
【问题讨论】:
标签: python django python-2.7 django-models django-admin