Django rest API не будет фильтровать поля, созданные представлением MariaDB - PullRequest
0 голосов
/ 25 января 2019

Djago rest API не фильтрует поля, созданные в представлении MariaDB.

  • selected
  • cnrbillable

Работает нормально для собственных полей базы данныхas:

  • swcustomerid
  • swparentid

Когда я выполняю фильтрацию по выбранному или cnrbillable, тогда django игнорирует мой запрос на фильтрацию.Может ли django фильтровать поля, «созданные» представлением MariaDB?

Модель Django:

class VwMrsCustomers(models.Model):
    swcustomerid = models.IntegerField(db_column='SWCUSTOMERID', primary_key=True)  # Field name made lowercase.
    swname = models.CharField(db_column='SWNAME', max_length=70, blank=True, null=True)  # Field name made lowercase.
    swparentid = models.IntegerField(db_column='SWPARENTID', blank=True, null=True)  # Field name made lowercase.
    selected = models.IntegerField(db_column='SELECTED', blank=True, null=True)  # Field name made lowercase.
    cnrbillable = models.IntegerField(db_column='CNRBILLABLE', default=1)  # Field name made lowercase.
    us = models.SmallIntegerField(db_column='US', default=0)  # Field name made lowercase.

    class Meta:
        db_table = 'vw_mrs_customers'

Представление MariaDB:

CREATE
DEFINER = app_mrs_reporting
VIEW vw_mrs_customers
AS
(
SELECT
    mrs_customers.SWCUSTOMERID,
    mrs_customers.SWNAME,
    mrs_customers.SWPARENTID,
    mrs_customer_settings.US,
    CASE when mrs_customer_settings.SWCUSTOMERID is null then 0 else 1 end AS SELECTED,
    CASE when mrs_customer_settings.SWCUSTOMERID is not null then mrs_customer_settings.CNRBILLABLE else 0 end AS CNRBILLABLE

FROM
    mrs_customers
    LEFT JOIN
    mrs_customer_settings ON (mrs_customers.SWCUSTOMERID = mrs_customer_settings.SWCUSTOMERID)
)

Представление Django:

class CustomerSettingsList(generics.ListAPIView):
    queryset = VwMrsCustomers.objects.all()
    serializer_class = CustomerSerializerSettings
    filter_backends = (django_filters.rest_framework.DjangoFilterBackend,
                       filters.SearchFilter,
                       filters.OrderingFilter,)
    filter_class = VwMrsCustomersFilter
    filter_fields = ('swcustomerid', 'swname', 'swparentid', 'cnrbillable', 'selected')
    search_fields = ('swcustomerid', 'swname', 'swparentid', 'cnrbillable', 'selected')
    ordering_fields = ('swcustomerid', 'swname', 'swparentid', 'cnrbillable', 'selected')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...