在 django admin 中加入两个表以获取 display_list 的列
Posted
技术标签:
【中文标题】在 django admin 中加入两个表以获取 display_list 的列【英文标题】:join two tables in django admin to get columns for display_list 【发布时间】:2019-02-26 11:44:00 【问题描述】:我在 django 管理界面的 list_display/joining 两个表时遇到问题。
我想要列 - SchPrograms 模型中的 program_name 和 is_active 以及 parameter_name, parameter_description >VisVisitParameters模型在django admin中。我能够在这些模型中的每一个中使用返回的那些列。我试图从已经被问到的question 那里寻求帮助。但我仍然无法弄清楚这一点。
class SchPrograms(models.Model):
program_id = models.AutoField(primary_key=True)
program_name = models.CharField(max_length=200, blank=True, null=True)
creation_timestamp = models.DateTimeField(blank=True, null=True)
is_active = models.IntegerField()
class Meta:
managed = True
db_table = 'sch_programs'
app_label = 'polls'
def __str__(self):
return self.program_name
class VisVisitParameters(models.Model):
vparameter_id = models.AutoField(primary_key=True)
parameter_name = models.CharField(max_length=300, blank=True, null=True)
parameter_description = models.TextField(blank=True, null=True)
is_active = models.IntegerField(choices=STATUS_CHOICES)
class Meta:
managed = False
db_table = 'vis_visit_parameters'
def __str__(self):
return str(self.vparameter_id)
app_label = 'polls'
class VisVisitParameterMappings(models.Model):
vp_map_id = models.AutoField(primary_key=True)
vparameter = models.ForeignKey(VisVisitParameters,on_delete=models.CASCADE)
program = models.ForeignKey(SchPrograms,on_delete=models.CASCADE)
display_order = models.IntegerField(blank=True, null=True)
is_active = models.IntegerField()
class Meta:
managed = False
db_table = 'vis_visit_parameter_mappings'
app_label = 'polls'
def __str__(self):
return str(self.parameter_name)
model.py
class VisVisitParameterMappings_admin(admin.ModelAdmin):
list_display = ('program_name','is_active','parameter_name','parameter_description ')
【问题讨论】:
【参考方案1】:要在列表显示页面上显示所需的项目,您可以编写自定义方法,如文档 here 所述。
例如,对于名为 program_name 的字段,您可以:
def program_name(self, obj):
if obj.program:
return obj.program.program_name
program_name.short_description = 'Program name'
对于另一个名为 parameter_name 的模型字段,您可能有:
def parameter_name(self, obj):
if obj.vparameter:
return obj.vparameter.parameter_name
parameter_name.short_description = 'Parameter Name'
希望对你有帮助。
【讨论】:
某种原因,没有得到 parameter_name 的任何值,它是空白的。我会查一下。但一个后续问题。如果我需要从一个模型中获取超过 1 列,我需要做什么。例如,我想拥有名为“is_active”的列和“program_name”?如果你能指导一下,那将是有帮助的。 如果您想要其他列,例如 is_active,您也可以为其编写方法。这就是它的记录方式.. :)以上是关于在 django admin 中加入两个表以获取 display_list 的列的主要内容,如果未能解决你的问题,请参考以下文章
Django实现自定义template页面并在admin site的app模块中加入自定义跳转链接