Как добавить метод в класс Django для преобразования в словарь

#python #django

Вопрос:

Я создаю инструмент отчетности для некоторого тестирования SW…

У меня есть следующая модель в моем models.py файл

 class triage_notes(models.Model):
    stack_name = models.CharField(
        max_length=30
    )
    
    build_number = models.IntegerField(    )
    
    fails = models.IntegerField()

    jira_ticket = models.CharField(
        max_length=100
    )
    
    notes = models.TextField()
    
    bug_type = models.CharField(
        max_length=50
    )
    def as_dict(self, *args, **kwargs):
        return {
            "id":self.id,
            "build_number": self.build_number,
            "fails": self.fails,
            "jira_ticket": self.jira_ticket,
            "notes": self.notes,
            "bug_type": self.bug_type
        }
 

Как вы можете себе представить, цель состоит в том, чтобы иметь возможность использовать этот метод в вызове запроса, чтобы представить мой запрос в виде словаря…

На мой взгляд, я пытаюсь использовать этот метод

 def index_view(request):
    context = triage_notes.objects.as_dict()
    print(context)
    return render(request, 'index.html', context)

 

Но я получаю следующую ошибку

 TypeError: as_dict() missing 1 required positional argument: 'self'
 

Я хотел бы лучше понять этот процесс, так как возможность реализации пользовательских методов для моих моделей будет отличным инструментом в будущем.

Любые рекомендации будут вам очень признательны! 🙂

Комментарии:

1. Взгляните на фреймворк Django REST , если ваша цель-сериализация / создание API REST и т. Д.

2. Я ценю ваш ресурс! Я посмотрю. На данный момент я все еще хотел бы узнать, как реализовать этот пользовательский метод, поскольку я считаю, что он будет очень полезен для меня в будущем

3. При рендеринге html вам не нужно преобразовывать данные в диктант

4. Честно говоря, сериализация @AustinHallett-это сложная задача, вам нужно обрабатывать различные типы int float Decimal данных, логические значения, даты , время… и вы можете получать их в нескольких форматах, поэтому проще использовать то, что обрабатывает их для вас. Если вас беспокоит дополнительное стороннее приложение, вы также можете использовать встроенный сериализатор с Django, как описано в документации: Сериализация объектов Django

5. Ну, конечно, решение, предложенное @AbdulAzizBarkat, это отличная точка для начала. В любом случае, неясно, чего вы хотите достичь здесь. конкретный объект? список предметов? последний объект?

Ответ №1:

У Django уже есть метод значений для queryset, который может упростить работу

 def index_view(request):
    context = list(triage_notes.objects.values("id", "build_number", "fails", "jira_ticket", "notes", "bug_type"))
    print(context)
    return render(request, 'index.html', context)