Создать пользовательский метод значений в django

Я хочу создать метод semi to values ​​в Django QuerySet.

Проблемы метода значений:

  1. Пропустите порядок полей в querySet, если я сделаю myquery = MyModel.objects.values('field1','field2','field3'), когда я напечатаю querSet, дайте мне [{'field2 ':'данные','поле1':'данные','поле3':'данные'},...]. поэтому этот порядок промахов вызовет проблему в Union набора запросов.
  2. если поле есть выбор в модели, тогда values(...) даст мне ключ словаря вместо его значения.
  • Я хочу создать собственный метод значений с помощью django Manager

    
    class MyModelManager(models.Manager):
        def values(self, *fields):
            # I want to get model belong to this manger
            # then I want to check the fields if its in models (we have fields came from annotate)
            # after that I want to exclude to the fields that has choices 
            # next I want to call the super values method and passed to it the values that does not have choices
            # finally I want to reorder query according to passed fields
    
    class MyModel(models.model):
        # An example model
        objects = MyModelManager()
    
    

person AlASAD WAIL    schedule 23.01.2021    source источник
comment
вы можете передать named=True и использовать values_list вместо values с queryset. Он вернет namedtuple, что может удовлетворить ваш вариант использования. Ссылка: docs.djangoproject.com/en/dev/ref /models/querysets/#values-list   -  person Abhyudai    schedule 23.01.2021
comment
Почему порядок ключей в возвращенных словарях может вызвать проблему с Union?   -  person Iain Shelvington    schedule 24.01.2021
comment
Почему бы просто не использовать метод get_<field_name>_display, который Django делает для каждого поля с вариантами выбора?   -  person Abdul Aziz Barkat    schedule 24.01.2021
comment
@lain union , объединение применяется тогда и только тогда, когда все наборы запросов имеют одинаковый порядок. вы можете прочитать условия Союза здесь [docs.djangoproject.com/en /3.1/ref/models/querysets/#union   -  person AlASAD WAIL    schedule 24.01.2021
comment
@AbdulAzizBarkat, вы правы, но я хочу повысить производительность, а не перебирать весь набор запросов.   -  person AlASAD WAIL    schedule 24.01.2021
comment
@AlASADWAIL Ваша проблема с профсоюзом вовсе не проблема. Объединение выполняется на стороне базы данных, поэтому объединение будет правильно работать со значениями. Словари не предназначены для заказа, поэтому они будут печататься в любом порядке.   -  person Abdul Aziz Barkat    schedule 24.01.2021
comment
@AbdulAzizBarkat, не могли бы вы использовать объединение в Django с аннотацией (дополнительные поля). Вы поймете, что я имею в виду.   -  person AlASAD WAIL    schedule 24.01.2021
comment
@AlASADWAIL вам нужно аннотировать все ваши наборы запросов для этого, поскольку kwargs не упорядочены, вам нужно связать аннотации, если их несколько Объединение наборов запросов Django не работает в сочетании с .annotate()   -  person Abdul Aziz Barkat    schedule 24.01.2021