Пользовательские столбцы в django_tables2
Я искал это, но мне не повезло, поэтому я искал немного помощи. Я пытаюсь добавить несколько дополнительных столбцов в таблицу, определенную моделью, используя определения функций в модели. Вот как теперь выглядит мой код:
# models.py
class MyModel(models.Model):
my_field = models.TextField()
def my_function(self):
# Return some calculated value based on the entry
return my_value
# tables.py
class MyTable(tables.Table):
my_extra_column = tables.Column(....)
class Meta:
model = MyModel
# views.py
table = MyTable(MyModel.objects.all())
RequestConfig(request).configure(table)
return render(request, ....)
Мой вопрос, могу ли я получить доступ my_function
в записях, переданных MyTable
так что я могу показать результат my_function
в обычае my_extra_column
столбец? Я предполагаю, что мне нужно использовать средства доступа, но я не могу понять, как я могу получить доступ к данным набора запросов, используя это. Спасибо!
1 ответ
В конце концов я понял, что на самом деле это было не так уж сложно:) Так что, используя мой пример выше, чтобы добавить пользовательский столбец, используя функцию в связанной модели, вы просто используете средства доступа...
# models.py
class MyModel(models.Model):
my_field = models.TextField()
my_field_2 = models.IntegerField()
def my_function(self):
# Return some calculated value based on the entry
return my_value
# tables.py
class MyTable(tables.Table):
my_extra_column = tables.Column(accessor='my_function',
verbose_name='My calculated value')
class Meta:
fields = ['my_field', 'my_field_2', 'my_extra_column']
model = MyModel
Проблема возникает, если и когда вы хотите иметь возможность сортировать эти данные, потому что функция не будет переводиться в любое допустимое поле в MyModel
, Таким образом, вы можете отключить сортировку в этом столбце, используя ordering=False
или укажите набор, используя order_by=('field', 'field2')