首页 > 解决方案 > 如何为 Django Tables2 使用 Django __str__() 方法

问题描述

我希望我的django_tables2表格显示__str__()记录的格式化版本。这是我正在使用的内容:

#models.py
class people(models.Model):
    namelast = models.CharField(max_length=100, verbose_name='Last Name')
    namefirst = models.CharField(max_length=100, verbose_name='First Name')
    # more fields...
    def __str__(self):
        return "%s %s" % (self.namefirst, self.namelast)

#tables.py
import django_tables2 as tables
from .models import people

class PersonTable(tables.Table):
    person = tables.Column()

    def render_person(self, value, record):
        return record  #Also tried record.lastname, record.__str__()

    class Meta:
        model = people
        fields = ('person',)

它的所有变体都刚刚返回了一个表,其中包含一个名为“Person”的列和空白行(即“_”)。如何获得格式为 的列namefirst namelast

标签: pythondjangodjango-tables2

解决方案


如果您使用 Python 3.6 及更高版本,请使用f-string,否则使用.format

def __str__(self):
    # f-string
    return "{self.namefirst} {self.namelast}"
    # format 
    return "{} {}".format(self.namefirst, self.namelast)

__str__用于显示对象的字符串表示形式 ex: p1 = people()现在,当您打印对象时,您会得到此输出print(p1) => john doe

在您的PersonTable的元数据中添加您要打印的字段

class PersonTable(tables.Table):

    def render_person(self, value, record):
        return record  #Also tried record.lastname, record.__str__()

    class Meta:
        model = people
        fields = ('namefirst', 'namelast',)

推荐阅读