Логика метода django, связанная с моделью с DRF

Я изучаю Django/DRF, и у меня есть понимание большинства концепций, но я не знаю ответа на этот вопрос, и я не могу найти ответ в интернете. Вот модель (не обращайте внимания на то, что id - это поле символов, которое не инкрементируется автоматически)

class Competition(models.Model):
    id = models.CharField(primary_key=True, max_length=7)
    buyer = models.ForeignKey(Buyer, on_delete=models.CASCADE,related_name='competition_buyer_id')
    name = models.CharField(max_length=200)
    open = models.DateTimeField()
    closed = models.DateTimeField()
    minimum_capacity = models.IntegerField()
    currency = models.CharField(max_length=5)

У меня есть логика, связанная с этой моделью, которую я поместил в папку utils внутри этого приложения

from django.utils import timezone

class CompetitionHandler:

    def get_state_based_on_open_and_closed_dates(self, open_date_object, closed_date_object):
        
        state = None

        if open_date_object > timezone.now() and closed_date_object > timezone.now():
            state = 'pending'
        
        if open_date_object < timezone.now() and closed_date_object > timezone.now():
            state = 'open'

        if open_date_object < timezone.now() and closed_date_object < timezone.now():
            state = 'closed'
        
        return state
        
        
def main():
    CompetitionHandler()

if __name__ == '__main__':
    main()

затем я вызвал его в сериализаторе для этой модели следующим образом:

from buyer.serializers import BuyerSerializer
from competition.models import Competition
from rest_framework import serializers
from business_logic.competition import CompetitionHandler



class CompetitionSerializer(serializers.ModelSerializer):

    status = serializers.SerializerMethodField()
    buyer = BuyerSerializer('buyer')

    class Meta:
        model = Competition
        fields = '__all__'
    
    def get_status(self, competition):
        competition_handler = CompetitionHandler()
        state = competition_handler.get_state_based_on_open_and_closed_dates(
        competition.open, competition.closed)

Является ли это плохой практикой? Что было бы лучшим django/django restframework для реализации этой логики? Должно ли это быть в модели, а не в папке utils? Где я должен вызвать это в сериализаторе или я должен был найти способ добавить это в модель в качестве поля, чтобы получить статус в базе данных? В общем, я просто не знаю лучшего подхода к этому сценарию и был бы очень признателен за ответ о том, какова наилучшая практика для этого в примере? И если это должен быть метод в модели, то где я должен его вызывать? И если в этом случае это должен быть метод в модели, то когда вы проведете черту, прежде чем поместить его в папку utils/services?

Вернуться на верх