#python #django #mongodb #django-models #pymongo
Вопрос:
Я работаю над проектом Django, где я использовал postgres, и он работал нормально. Теперь я хочу использовать MongoDB, но чаще всего при запросе объектов я получаю ошибку «Сообщение об исключении не предоставлено». пожалуйста, найдите приведенные ниже коды для справки и помощи.
Модель
class Order(models.Model):
order_status = (('Pending', 'Pending'), ('Under Process', 'Under Process'), ('Dispatched',
'Dispatched'),
('Delivered', 'Delivered'), ('Cancelled', 'Cancelled'), ('Out for
delivery',
'Out for delivery'))
patient = models.ForeignKey(Patient, on_delete=models.SET_NULL, null=True, blank=True)
shipping_address = models.ForeignKey(ShippingAddress, on_delete=models.DO_NOTHING,
null=True,
blank=True)
order_created = models.DateTimeField(auto_now_add=True,null=True)
date_ordered = models.DateTimeField(null=True)
complete = models.BooleanField(default=False)
transaction_id = models.CharField(max_length=100, null=True)
order_number = models.CharField(max_length=20, unique=True, null=True)
status = models.CharField(choices=order_status, default='Pending', max_length=30)
payment_status = models.CharField(choices=(('Received', 'Received'), ('Failed', 'Failed'),
('Pending', 'Pending')),
default='Pending', max_length=30)
ip_address = models.CharField(max_length=30, null=True)
coupon_applied = models.BooleanField(null=True,blank=True)
coupon =
models.ForeignKey(ShoppingCoupon,on_delete=models.DO_NOTHING,null=True,blank=True)
coupon_discount = models.DecimalField(max_digits=7,decimal_places=2,
null=True,blank=True,default=0)
# Payment details captured from payment gateway
payment_order_id = models.CharField(max_length=100, null=True) # razorpay order id
payment_id = models.CharField(max_length=100, null=True) # Razorpay payment id
payment_signature = models.CharField(max_length=100, null=True)
payment_method = models.CharField(max_length=100, null=True)
ordered_medicine = models.JSONField(null=True,blank=True)
Запрос
def cartData(request):
if request.user.is_authenticated and request.user.user_type == 'patient':
patient = Patient.objects.select_related('user').get(user=request.user)
order, created = Order.objects.get_or_create(patient=patient, complete=False) // Im
getting error here
items = order.cartitem_set.select_related('medicine').all()
cartItems = order.get_cart_items
я получаю сообщение об ошибке «заказ, создан = Заказ.объекты.get_or_create(пациент=пациент, завершено=Ложь)»
Комментарии:
1. Вы также можете использовать
try except
блок для достижения этой цели :try: order = Order.objects.get(patient=patient, complete=False) except: Order.DoesNotExist as e: print(e.message) order = Order(patient=patient, complete=False) order.save()
2. Спасибо за ваш ответ. но это не работает
3. Каков тип ошибки.
ValueError
?TypeError
? попробуйте поймать его в блоке «кроме» тоже
Ответ №1:
У меня такая же проблема got_or_create
, метод не работает с django/mongo. особенно BooleanField
. Если я удалю BooleanField
его, он будет хорошо работать.