如何在django-tables2中调用非模型字段

How to call a non model field in django-tables2

我的应用程序 (app1) 中有多个模型。但是我想从我在 app1 中创建的 djnago-tables2 中的另一个应用程序(app2)中创建的模型中调用一个字段。我怎么称呼它?我尝试了几种方法,但无法调用它。错误显示 Cannot resolve keyword u'xyz' into field.。请帮忙

如果您要在 Django-tables2 中使用多个模型,我建议您避免在 table 中定义模型,因此您的 table 可能如下所示:

class NonModelTable(tables.Table):
    name = tables.columns.TemplateColumn(template_code=u"""{{ record.name }}""", orderable=True, verbose_name='Name')
    surname = tables.columns.TemplateColumn(template_code=u"""{{ record.surname }}""", orderable=True, verbose_name='Surname')
    address = tables.columns.TemplateColumn(template_code=u"""{{ record.address }}""", orderable=True, verbose_name='Address')

    class Meta:
        attrs = {'class': 'table table-condensed table-vertical-center', 'id': 'dashboard_table'}
        fields = ('name', 'surname', 'address')
        sequence = fields
        order_by = ('-name', )

当你像这样定义 table 时,你可以传递一个字典列表来初始化 table,但是这个字典需要有这 3 个字段(名字、姓氏、地址),即使它们是空的。

你没有提供任何关于你的确切数据结构的信息所以我发明了这个 table 只有 3 个字段,现在要初始化一个 table 就像使用不同的模型一样,你应该生成一个标准 字典列表,例如:

data = []
object_1 = YourModel.objects.all()
for object in object_1:
   data.append({'name': object.name, 'surname': object.type, 'address': ''})

object_2 = Your2ndModel.objects.all()
for object in object_2:
   data.append({'name': object.name, 'surname': object.status, 'address': object.warehouse})

table = NonModelTable(data)

return render(request, 'template.html', {... 'table':table,...})

当然,字段的数量是可以自定义的,您可以根据需要使用任意数量的字段,但是当您初始化 de table 时,字典列表中的字典必须遵循table结构,所有dicts必须有table定义中出现的所有字段

编辑:另一种选择

如果您不想修改您的 table,您可以使用您传递给 table 的数据生成一个字典列表,并在后面附加来自其他模型的数据第一个模型结构:

  1. 从您的 app1 获取所有对象
  2. 生成包含 table
  3. 所需字段的字典列表
  4. 从您的 app2 获取所有对象
  5. 使用 app1 模型中的相同字典键附加 app2 中的对象
  6. table = YourTable(data)
  7. 初始化table