JSONDecodeError в / api / customer / order / add / Ожидаемое имя свойства, заключенное в двойные кавычки: строка 1, столбец 30 (символ 29) Метод запроса: URL запроса POST: http://localhost:8000/api/customer/order/add/?= Версия Django: 2.2.6 ИсключениеТип: JSONDecodeError Значение исключения:
Ожидаемое имя свойства, заключенное в двойные кавычки: строка 1, столбец 30 (символ 29) Расположение исключения: /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/json/decoder.py в raw_decode, строка 353 Исполняемый файл Python: / Users / sandip / Desktop / myvirtualenv / foodtasker / bin / python Версия Python: 3.7.3
ВЫБРАТЬ APAIS
import json
from django.utils import timezone
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
from oauth2_provider.models import AccessToken
from foodtaskerapp.models import Restaurant, Meal, Order, OrderDetails
from foodtaskerapp.serializers import RestaurantSerializer, MealSerializer
def customer_get_restaurants(request):
restaurants = RestaurantSerializer(
Restaurant.objects.all().order_by("-id"),
many = True,
context = {"request": request}
).data
return JsonResponse({"restaurants": restaurants})
def customer_get_meals(request, restaurant_id):
meals = MealSerializer(
Meal.objects.filter(restaurant_id = restaurant_id).order_by("-id"),
many = True,
context = {"request": request}
).data
return JsonResponse({"meals": meals})
@csrf_exempt
def customer_add_order(request):
"""
params:
access_token
restaurant_id
address
order_details (json format), example:
[{"meal_id": 1, "quantity": 2},{"meal_id": 2, "quantity": 3}]
stripe_token
return:
{"status": "success"}
"""
if request.method == "POST":
# Get token
access_token = AccessToken.objects.get(token = request.POST.get("access_token"),
expires__gt = timezone.now())
# Get profile
customer = access_token.user.customer
# Check whether customer has any order that is not delivered
if Order.objects.filter(customer = customer).exclude(status = Order.DELIVERED):
return JsonResponse({"status": "failed", "error": "Your last order must be completed."})
# Check Address
if not request.POST["address"]:
return JsonResponse({"status": "failed", "error": "Address is required."})
# Get Order Details
order_details = json.loads(request.POST["order_details"])
order_total = 0
for meal in order_details:
order_total += Meal.objects.get(id = order_details["meal_id"]).price * meal["quantity"]
# order_total += Meal.objects.get(id = meal["meal_id"]).price * meal["quantity"]
if len(order_details) > 0:
# Step 1 - Create an Order
order = Order.objects.create(
customer = customer,
restaurant_id = request.POST["restaurant_id"],
total = order_total,
status = Order.COOKING,
address = request.POST["address"]
)
# Step 2 - Create Order details
# for meal in order_details:
# OrderDetails.objects.create(
# order = order,
# meal_id = meal["meal_id"],
# quantity = meal["quantity"],
# sub_total = Meal.objects.get(id = meal["meal_id"]).price * meal["quantity"]
# )
for meal in order_details:
OrderDetails.objects.create(
order = order,
meal_id = order_details["meal_id"],
quantity = order_details["quantity"],
sub_total = Meal.objects.get(id = order_details["meal_id"]).price * meal["quantity"]
)
return JsonResponse({"status": "success"})
def customer_get_latest_order(request):
return JsonResponse({})
from django.db import models
from django.contrib.auth.models import User
from django.utils import timezone
# Create your models here.
class Restaurant(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="restaurant")
name = models.CharField(max_length=500)
phone = models.CharField(max_length=500)
address = models.CharField(max_length=500)
logo = models.ImageField(upload_to="restaurant_logo/", blank=False)
def __str__(self):
return self.name
class Customer(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="customer")
avatar = models.CharField(max_length=500)
phone = models.CharField(max_length=500, blank=True)
address = models.CharField(max_length=500, blank=True)
def __str__(self):
return self.user.get_full_name()
class Driver(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="driver")
avatar = models.CharField(max_length=500)
phone = models.CharField(max_length=500, blank=True)
address = models.CharField(max_length=500, blank=True)
def __str__(self):
return self.user.get_full_name()
class Meal(models.Model):
restaurant = models.ForeignKey(Restaurant, on_delete=models.CASCADE)
name = models.CharField(max_length=500)
short_description = models.CharField(max_length=500)
image = models.ImageField(upload_to="meal_images/", blank=False)
price = models.IntegerField(default=0)
def __str__(self):
return self.name
class Order(models.Model):
COOKING = 1
READY = 2
ONTHEWAY = 3
DELIVERED = 4
STATUS_CHOICES = (
(COOKING, "Cooking"),
(READY, "Ready"),
(ONTHEWAY, "On the way"),
(DELIVERED, "Delivered"),
)
customer = models.ForeignKey(Customer, on_delete=models.CASCADE)
restaurant = models.ForeignKey(Restaurant, on_delete=models.CASCADE)
driver = models.ForeignKey(Driver, on_delete=models.CASCADE, 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)
picked_at = models.DateTimeField(blank = True, null = True)
def __str__(self):
return str(self.id)
class OrderDetails(models.Model):
order = models.ForeignKey(Order,on_delete=models.CASCADE, related_name="order_details")
meal = models.ForeignKey(Meal, on_delete=models.CASCADE)
quantity = models.IntegerField()
sub_total = models.IntegerField()
def __str__(self):
return str(self.id)
из импорта rest_frameworkсериализаторы
из foodtaskerapp.models import Ресторан, Еда
, класс RestaurantSerializer (serializers.ModelSerializer): logo = serializers.SerializerMethodField ()
def get_logo(self, restaurant):
request = self.context.get("request")
logo_url = restaurant.logo.url
return request.build_absolute_uri(logo_url)
class Meta:
model = Restaurant
fields = ("id", "name", "phone", "address", "logo")
класс MealSerializer (сериализаторы. ModelSerializer): image = serializers.SerializerMethodField ()
def get_image(self, meal):
request = self.context.get("request")
image_url = meal.image.url
return request.build_absolute_uri(image_url)
class Meta:
model = Meal
fields = ("id", "name", "short_description", "image", "price")