2016-10-17 24 views
0

我有一个基于项目列表的IntegerField模型。如何使一个函数像Django Admin中的字段一样工作?

LIST = (
    (0, 'None'), 
    (1, 'Male'), 
    (2, 'Female'), 
) 

class MyModel(models.Model): 
    gender = models.IntegerField(choices=LIST, default=0) 
    some_unimportant_value1 ... 
    some_unimportant_value2 ... 

在MyModel类中还有一个函数,如果性别尚未赋值,则返回False。

def genderHasValue(self): 
     if self.gender == 0: 
      return False 

当观看在Django管理区域MyModels的名单,我希望能够看到genderHasValue函数的计算结果。例如,Django管理区域为MyModel可能是这样的:

some_unimportant_value1 some_unimportant_value2 genderHasValue 
123      456      N 
789      012      Y 

这是假设some_unimportant_value1行具有0作为其IntegerField和some_unimportant_value2行有1作为IntegerField。

GenderHasValue函数可以做到这一点吗?

谢谢。

回答

2

是的,这可以这样实现:

# admin.py 
class MyModelAdmin(admin.ModelAdmin): 
    list_display = ['some_unimportant_value1', 'some_unimportant_value1', 'genderHasValue'] 

    def genderHasValue(self, obj): 
     if self.gender == 0: 
      return False 
     return True 

# The file where you configure your admin 
admin.site.register(MyModel, MyModelAdmin) 

UPDATE: 回答你的后续问题的意见:是的,它是可能的,只是把这个:

genderHasValue.short_description = "Gender Has Value"

你的财产定义后

+2

你甚至不需要将该方法移动到管理类;您可以直接在list_display中按名称引用模型方法。 –

+0

谢谢你的答复。问题:是否可以给该函数一个详细的名称,所以它有一个很好的标题值而不是“GENDERHASVALUE”? –

+1

@TomBrock:查看更新的答案 –

相关问题