我是Python的新手,我试图从我的模型类中过滤掉一些对象。
我已成功向系统添加了新订单,现在我想向workers
发送通知service
order
与所请求的online_status
相关。示例:CustomerA在Y地址的日期X发送电工的请求。在我的服务'团队我有Josh和Cris是机械师,Arnold和David是电工。我想首先过滤哪个工作人员覆盖该服务(产生Arnold和David),然后我想过滤他们的class Service(models.Model): #electrician, mechanic, etc
name = models.CharField(max_length=500)
short_description = models.CharField(max_length=500)
image = models.ImageField(upload_to='service_image/', blank=False)
price = models.IntegerField(default=0)
def __str__(self):
return self.name
class Worker(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='worker')
avatar = models.CharField(max_length=500)
phone = models.CharField(max_length=500, blank=True)
address = models.CharField(max_length=500, blank=True)
service = models.ForeignKey(Service, blank=True, null=True)
online_status = models.BooleanField(default=1) # 1=online OR 0=offline
def __str__(self):
return self.user.get_full_name()
class Order(models.Model):
REQUESTED = 1
ACCEPTED = 2
DENIED = 3
CANCELED = 4
COMPLETED = 5
STATUS_CHOICES = (
(REQUESTED, "Requested"),
(ACCEPTED, "Accepted"),
(DENIED, "Denied"),
(CANCELED, "Canceled"),
(COMPLETED, "Completed"),
)
customer = models.ForeignKey(Customer)
worker = models.ForeignKey(Worker, blank=True, null=True)
address = models.CharField(max_length=500)
total = models.IntegerField()
status = models.IntegerField(choices = STATUS_CHOICES)
created_at = models.DateTimeField(default = timezone.now)
shot_issue_description = models.CharField(max_length=500)
service_date = models.DateTimeField()
def __str__(self):
return str(self.id)
class OrderDetails(models.Model):
order = models.ForeignKey(Order, related_name='order_details')
service = models.ForeignKey(Service)
sub_total = models.IntegerField()
def __str__(self):
return str(self.id)
。这是我到目前为止所得到的:
models.py
customer
以下是order
制作def customer_add_order(request):
"""
INPUT FROM CUSTOMER:
access_token
service_date
address
shot_issue_description
order_details (json format), example:
{"service_id" : 1} >> Electrician
"""
if request.method == "POST":
# Get user token
access_token = AccessToken.objects.get(token = request.POST.get("access_token")) #, expires__gt = timezone.now())
# Get customer
customer = access_token.user.customer
# Check address
if not request.POST["address"]:
return JsonResponse({"status": "failed", "error": "Address is required."})
# Check whether customer has any order that is not delivered
# !!!!!!!!! check also if objects complete are the same service!!!!!!!!!
if Order.objects.filter(customer = customer).exclude(status = Order.COMPLETED) or Order.objects.filter(customer = customer).exclude(status = Order.CANCELED):
return JsonResponse({"status": "failed", "error": "Your last service is not completed or canceled yet."})
# Get Order Details
order_details = json.loads(request.POST["order_details"])
shot_issue_description = request.POST["shot_issue_description"]
order_total = Service.objects.get(id = order_details["service_id"]).price
#____________Filter starts
# filter workers by online_status
# ???
# filter workers by service type
# ???
#____________Filter ends
if len(order_details) > 0:
# Step 1 - Create Order
order = Order.objects.create(
customer = customer,
address = request.POST["address"],
service_date = request.POST["service_date"],
total = order_total,
shot_issue_description = shot_issue_description,
status = Order.REQUESTED
)
# Step 2 - Create Order
OrderDetails.objects.create(
order = order,
service_id = order_details["service_id"],
sub_total = Service.objects.get(id = order_details["service_id"]).price
)
return JsonResponse({"status": "success"})
:
$end = Carbon::createFromFormat('Y-m-d H:i:s', $this->end_time);
$date = Carbon::createFromDate($end->year, $end->month, $end->day, 'Europe/Warsaw');
if($date->diffInDays() == 0){
// It's today.
return true;
}
目前我在不过滤工人的情况下向系统添加订单。这个想法是只有在有服务的工人和他在线时才添加订单。我感谢所有的帮助!