我使用Django Admin来建立一个管理站点。有两个表,一个是ModelA
,另一个是{ModelB
中的一个模型字段b_b
为None,则它可以用ModelA
的字段a_b
的值显示在网页上。在
我不知道怎么做,下面是伪代码:
在模型.py在
from django.db import models
class ModelA(models.Model):
a_a = models.CharField(max_length=6)
a_b = models.CharField(max_length=6)
class ModelB(models.Model):
modela = models.OneToOneField(ModelA)
b_b = models.CharField(max_length=6, choices=[(1, 'M'), (2, 'F')], default=self.modela.a_b)
在管理员py在
^{pr2}$我想如果modelB的b_b的默认值是modelA的相对a_b值,那么在django admin change(edit)页面中,我有一个默认值b_b(View),该页面将数据与特定的modelB实例相关联。在
我想在网页中更容易地填充b。在
我不知道这个要求能否实现?或者有别的方法可以达到这个目的?在
我尝试按如下方式自定义模板过滤器:
在templates/admin/includes中/字段集.html在
{% load drop_null %}
{% if field.is_checkbox %}
{{ field.field }}{{ field.label_tag }}
{% else %}
{{ field.label_tag }}
{% if field.is_readonly %}
<p>{{ field.contents }}</p>
{% else %}
{% if field.field.name == 'b_b' %}
{{ field|dropnull }}
{% else %}
{{ field.field }}
{% endif %}
{% endif %}
{% endif %}
在templatetags/drop中_空.py在
from django import template
register = template.Library()
@register.filter(name='dropnull')
def dropnull(cls):
return cls.modela.a_b
“字段”是<;django.contrib.admin.助手.AdminField对象位于0x3cc3550>。它不是ModelB的实例。 如何获取ModelB实例?在
您可以重写
modelB
模型的save
方法,而不是提供默认值:在注释中澄清后编辑
如果您只想向访问者显示值,但希望保持
ModelB.b_b
为空的事实,那么逻辑应该位于模板中。在假设您的视图集
^{pr2}$objB
是您感兴趣显示的ModelB
对象,那么模板的相关部分应该如下所示:您可以为管理模板定义并注册一个自定义
template filter
来自文档:https://docs.djangoproject.com/en/1.8/howto/custom-template-tags/
相关问题 更多 >
编程相关推荐