Пользовательские столбцы в 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')

Другие вопросы по тегам