Фильтр дат для методов моделирования

Привет всем в этом проекте я использую python и Django.

В настоящее время у меня есть две модели, где я пишу методы модели, чтобы показать определенные связанные поля (FOREIGN KEYS). Я покажу это ниже, теперь я пытаюсь сделать возможность фильтровать по дате эти методы модели, из того, что я пробовал, я получаю ошибку нет подписи для встроенных методов. Итак, в основном мой шаблон отображает эти модельные методы, и теперь я хочу осуществлять поиск между диапазонами дат.

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


#Sales agent model in models.py
class SalesAgent(models.Model):
    user = models.OneToOneField(User,on_delete=models.SET_NULL,null=True,related_name="sauser")
    Team_leader = models.ForeignKey(TeamLeader,on_delete=models.SET_NULL,null=True,related_name="team_agent")
    SA_name = models.CharField(max_length=40)
    role = models.CharField(choices=Roles,default="default",max_length=13)
    def __str__(self):
        return self.user.username
    def sget_totals(self):
        today = datetime.date.today()
        return self.agent_sale.filter(Date_created__year=today.year,Date_created__month=today.month)
    def sget_confirmed(self):
        today = datetime.date.today()
        return self.agent_sale.filter(State="Confirmed",Date_created__year=today.year,Date_created__month=today.month)
    def sget_debi(self):
        today = datetime.date.today()
        return self.agent_sale.filter(AcknowledgeQA=True,State="Confirmed",Debi_status="Accepted",Date_created__year=today.year,Date_created__month=today.month)
    def sget_requested(self):
        today = datetime.date.today()
        return self.agent_sale.filter(Debi_status="Requested",Date_created__year=today.year,Date_created__month=today.month)
    def sget_cancelled(self):
        today = datetime.date.today()
        return self.agent_sale.filter(State="Cancelled",Date_created__year=today.year,Date_created__month=today.month)
    def sget_pending(self):
        today = datetime.date.today()
        return self.agent_sale.filter(State="Pending",Date_created__year=today.year,Date_created__month=today.month)

    #FILTERED SEARCH
    def sfget_totals(self):
        return self.agent_sale.all()
    def sfget_confirmed(self):
        return self.agent_sale.filter(State="Confirmed")
    def sfget_debi(self):
        return self.agent_sale.filter(AcknowledgeQA=True,State="Confirmed",Debi_status="Accepted")
    def sfget_requested(self):
        return self.agent_sale.filter(Debi_status="Requested")
    def sfget_cancelled(self):
        return self.agent_sale.filter(State="Cancelled")
    def sfget_pending(self):
        return self.agent_sale.filter(State="Pending")


#THIS IS THE FUNCTION IM TRYING in views.py

def asearch_stats(request):
    if request.method == "POST":
        from_date = request.POST['from']
        to_date = request.POST['to']
        flookup = SalesAgent.objects.filter(Q(agent_sale__Date_created__range=[from_date,to_date])).distinct
        return render(request,"Sales/salesfilter.html",{"from_date":from_date,'to_date':to_date,"flookup":flookup})
    else:
        return render(request,"Sales/index.html",{})


Вы, вероятно, захотите использовать пользовательский Manager вместо этого, что-то вроде этого должно работать:

models.py

from .managers import SalesAgentManager

class SalesAgent(models.Model):

    user = models.OneToOneField(...)
    role = models.CharField(...)
    ...

    manager = SalesAgentManager

managers.py

class SalesAgentQuerySet(models.QuerySet): 

    def seller_roles(self):
        return self.filter(role='Seller')

    def superusers(self):
        return self.filter(user__is_superuser=True)


class SalesAgentManager(models.Manager):
    
    def get_queryset(self):
        return SalesAgentQuerySet(self.model, using=self._db)

Тогда вы можете сделать:

# get all superuser sales agents:
superuser_sales_agents = SalesAgenet.objects.all().superusers()

# get all seller roles:
seller_roles = SalesAgent.objects.all().seller_roles()
Вернуться на верх