众所周知,通过设置属性可以轻松地在Django管理员中显示方法返回值为boolean boolean:
class MyModel(models.Model):
def is_something(self):
if self.something == 'something':
return True
return False
is_something.boolean = True
Run Code Online (Sandbox Code Playgroud)
如何在财产上实现同样的效果,例如以下情况?
class MyModel(models.Model):
@property
def is_something(self):
if self.something == 'something':
return True
return False
Run Code Online (Sandbox Code Playgroud)
Gar*_*Jax 27
等待更好的解决方案出现,我已经通过以下方式解决了这个问题:
class MyModel(models.Model):
def _is_something(self):
if self.something == 'something':
return True
return False
_is_something.boolean = True
is_something = property(_is_something)
Run Code Online (Sandbox Code Playgroud)
然后我将_is_something在ModelAdmin子类中引用该方法:
class MyModelAdmin(admin.ModelAdmin):
list_display = ['_is_something']
Run Code Online (Sandbox Code Playgroud)
和is_something财产,否则:
if my_model_instance.is_something:
print("I'm something")
Run Code Online (Sandbox Code Playgroud)
小智 23
这是我在ModelAdmin中直接找到的最简单的方法:
class MyModelAdmin(admin.ModelAdmin):
def is_something(self, instance):
return instance.something == "something"
is_something.boolean = True
is_something.short_description = u"Is something"
list_display = ['is_something']
Run Code Online (Sandbox Code Playgroud)
您需要为shadowing模型中的属性创建一个函数。我的意思是,您将需要在ModelAdmin类中重新创建一个函数,该函数的名称与主Model中定义的属性相同。
例:
# Model
class Product(models.Model):
@property # you can omit this directive
def in_stock(self):
# boolean check return
return self.quantity > 0
Run Code Online (Sandbox Code Playgroud)
...
# Django-modeladmin
class ProductAdmin(admin.ModelAdmin):
list_display = ('in_stock', ...)
def in_stock(self, instance):
return instance.in_stock
in_stock.boolean = True
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8332 次 |
| 最近记录: |