Django: Невозможно получить номер телефона из последнего заказа пользователя в Chatbot View
Проблема:
Я создаю чатбота, используя Django, и у меня возникли проблемы с получением номера телефона из моей модели CartOrder
. У меня есть представление log_customer_query
, которое должно возвращать номер телефона из последнего заказа пользователя, но оно не работает.
Код:
Вот мое log_customer_query
мнение:
def log_customer_query(request):
user = request.user
query_text = request.POST.get('query_text', '')
if not user.is_authenticated:
return JsonResponse({'error': 'User must be authenticated to log a query.'}, status=401)
try:
# Fetch the latest order for the user
latest_order = CartOrder.objects.filter(user=user).latest('order_date')
# Create a new customer query
new_customer = customer.objects.create(
user=user,
title=query_text[:100], # Limit to 100 characters
pid=latest_order.pid,
oid=latest_order.oid,
full_name=latest_order.full_name,
email=latest_order.email,
mobile=latest_order.mobile,
address=latest_order.address,
landmark=latest_order.landmark,
city=latest_order.city,
state=latest_order.state,
postalCode=latest_order.postalCode,
images=latest_order.images,
price=latest_order.price,
old_price=latest_order.old_price,
qty=latest_order.qty,
color=latest_order.color,
size=latest_order.size,
order_date=latest_order.order_date,
return_expire_date=latest_order.return_expire_date,
product_status=latest_order.product_status,
)
return JsonResponse({'success': 'Query logged successfully.'})
except CartOrder.DoesNotExist:
# If the user doesn't have any orders, create a new customer query without order details
new_customer = customer.objects.create(
user=user,
title=query_text[:100], # Limit to 100 characters
)
return JsonResponse({'success': 'Query logged successfully.'})
А вот моя CartOrder
модель:
class CartOrder(models.Model):
user = models.ForeignKey(CustomUser, on_delete=models.CASCADE)
sku = ShortUUIDField(length=10, max_length=100, prefix="sku", alphabet="1234567890")
pid = ShortUUIDField(null=True, blank=True, default=None)
oid = ShortUUIDField(length=10, max_length=100, prefix="oid", alphabet="1234567890")
full_name = models.CharField(max_length=100, null=True, blank=True)
email = models.CharField(max_length=100, null=True, blank=True)
mobile = models.CharField(max_length=100, null=True, blank=True)
address = models.CharField(max_length=100, null=True, blank=True)
landmark = models.CharField(max_length=100, null=True, blank=True)
city = models.CharField(max_length=100, null=True, blank=True)
coupons = models.ManyToManyField("core.Coupon", blank=True)
state = models.CharField(max_length=100, null=True, blank=True)
postalCode = models.CharField(max_length=100, null=True, blank=True)
title = models.CharField(max_length=100)
images = models.ImageField(upload_to="order-image", default="product.jpg")
price = models.DecimalField(max_digits=10, decimal_places=2, default="0.00")
old_price = models.DecimalField(max_digits=10, decimal_places=2, default="0.00")
qty = models.BigIntegerField(default=0)
color = models.CharField(max_length=500, null=True, blank=True, default=None)
size = models.CharField(max_length=500, null=True, blank=True, default=None)
saved = models.DecimalField(max_digits=10, decimal_places=2, default="0.00")
shipping_method = models.CharField(max_length=100, null=True, blank=True)
tracking_id = models.CharField(max_length=100, null=True, blank=True)
tracking_website = models.CharField(max_length=100, null=True, blank=True)
paid_status = models.BooleanField(default=False)
stripe_payment_intent = models.CharField(max_length=1000, null=True, blank=True)
order_date = models.DateTimeField(auto_now_add=True)
return_expire_date = models.DateField(blank=True, null=True)
product_status = models.CharField(choices=STATUS_CHOICE, max_length=30, default="processing")
return_product = models.BooleanField(default=False)
class Meta:
verbose_name_plural = "Cart Order"
Я использую следующий код JavaScript для вызова представления log_customer_query
:
Ошибка:
Проблема в том, что представление log_customer_query
не возвращает номер телефона из модели CartOrder
. Я пробовал распечатать объект latest_order
и поле mobile
, но они оба пусты.
Ожидаемое поведение:
Я ожидаю, что представление log_customer_query
будет возвращать номер телефона последнего заказа пользователя.
Шаги для воспроизведения:
- Создайте новый объект
CartOrder
с действительным номером телефона. - Вызовите представление
log_customer_query
, используя код JavaScript, приведенный выше. - Проверьте ответ представления, чтобы убедиться, что оно вернуло номер телефона.