我是Python新手,正在尝试从models类中过滤一些对象。
我已经成功地向系统添加了一个新订单,现在我想向请求的workers
相关的service
发送一个通知。示例:CustomerA在日期X向Y地址发送电工请求。在我的服务团队中,乔希和克里斯是机械师,阿诺德和大卫是电工。我想先过滤哪个worker覆盖了该服务(结果是Arnold和David),然后过滤他们的online_status
。以下是我目前掌握的情况:
你知道吗型号.py你知道吗
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)
这是我的函数,其中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"})
目前,我正在向系统添加一个订单,而不过滤工人。这样做的目的是,只有在有一个工人提供服务并且他在线的情况下,才能添加订单。谢谢你的帮助!你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐