2015-08-11 1 views
1

У меня есть несколько моделей в моем приложении (app1). Но я хочу назвать одно поле из модели, созданной в моем другом приложении (app2), в моих djnago-tables2, созданных в приложении1. Как я могу это назвать? Я попробовал несколько способов, но не смог назвать это. ошибка говорит Cannot resolve keyword u'xyz' into field.. Пожалуйста, помогитеКак назвать немодельное поле в django-tables2

ответ

1

Если вы собираетесь использовать несколько моделей в 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 с данными, вы передаете к столу, и добавить данные из других моделей, следующих за первым структура модели:

  1. Получить все объекты из вашего App1
  2. Создание списка dicts с необходимыми полями для таблицы
  3. Получить все объекты из вашего app2
  4. Append уплотнительного bjects от вашего app2 с теми же Словаре ключи от вашей модели app1
  5. Инициализировать таблицу с table = YourTable(data)