Фильтр дат для методов моделирования
Привет всем в этом проекте я использую 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()