我使用Django Admin来构建管理网站。有两个表,一个是包含数据的ModelA
,另一个是没有数据的ModelB
。如果ModelB
中的一个模型字段b_b
为None,则可以在网页上显示ModelA
的字段a_b
的值。
我不知道怎么做,这里是伪代码:
在models.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)
在 admin.py 文件中。
from django.contrib import admin
from .models import ModelA, ModelB
class ModelBAdmin(admin.ModelAdmin):
fields = ['b_b']
list_display = ('b_b')
如果modelB的b_b具有与modelA的a_b值相关的默认值,我在Django管理页面的更改(编辑)页面中具有b_b(View)的默认值,该页面将数据关联到特定的modelB实例。
我希望能更轻松地填写网页上的b_b。
我不知道是否可以实现此要求?还是有其他方法可以实现?
我尝试自定义模板过滤器如下:
在templates/admin/includes/fieldset.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_null.py文件中。
from django import template
register = template.Library()
@register.filter(name='dropnull')
def dropnull(cls):
return cls.modela.a_b
'field' 是一个 < django.contrib.admin.helpers.AdminField object at 0x3cc3550>,它不是 ModelB 的实例。如何获得 ModelB 的实例?
modelB
实例的管理员表单,还是访客将看到与特定modelB
实例相关联的数据的公共页面? - 301_Moved_Permanently