У меня есть несколько моделей в моем приложении (app1). Но я хочу назвать одно поле из модели, созданной в моем другом приложении (app2), в моих djnago-tables2, созданных в приложении1. Как я могу это назвать? Я попробовал несколько способов, но не смог назвать это. ошибка говорит Cannot resolve keyword u'xyz' into field.
. Пожалуйста, помогитеКак назвать немодельное поле в django-tables2
ответ
Если вы собираетесь использовать несколько моделей в Django-tables2 я рекомендую вам, чтобы избежать определения модели в таблице, так что ваш стол может быть как:
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',)
При определении таблицы например, вы можете передать список словарей для инициализации таблицы, но эти словари должны иметь эти 3 поля (имя, фамилия, адрес), даже если они пусты.
Вы не предоставили какой-либо информации о вашей точной структуре данных, так что я придумал эту таблицу только с 3 полями для инициализации теперь таблицу, как, что с помощью различных моделей, вы должны сгенерировать стандартный список dicts как:
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,...})
конечно количество полей настраивается, вы можете иметь столько полей, сколько вы хотите с именами вы хотите, но при инициализации де таблицы, в dicts в пределах списка dicts должен следовать структуру таблицы, все указатели должны иметь все поля, которые отображаются в таблице.
EDIT: Еще один вариант
Если вы не хотите, чтобы изменить таблицу, вы можете создать список dicts с данными, вы передаете к столу, и добавить данные из других моделей, следующих за первым структура модели:
- Получить все объекты из вашего App1
- Создание списка dicts с необходимыми полями для таблицы
- Получить все объекты из вашего app2
- Append уплотнительного bjects от вашего app2 с теми же Словаре ключи от вашей модели app1
- Инициализировать таблицу с
table = YourTable(data)