python - 为什么我的信息没有从数据库中显示
问题描述
我需要帮助解决我项目中的数据库问题。问题在于将带有附加配置文件的订单保存到数据库中。它不会将用户保存到订单中,因此有时订单是半空的,当您尝试显示该用户的所有订单时,您会得到一个空列表。
这是我的代码。
def checkout_success(request, order_number):
save_info = request.session.get('save_info')
order = get_object_or_404(Order, order_number=order_number)
print("Order", order)
profile = UserProfile.objects.get(user=request.user)
print(profile)
# Attach the user's profile to the order
order.user_profile = profile
order.save()
print(order.user_profile)
# Save the user's info
if save_info:
profile_data = {
'default_phone': order.phone,
'default_billingCountry': order.billingCountry,
'default_billingPostcode': order.billingPostcode,
'default_billingCity': order.billingCity,
'default_billingAdress1': order.billingAdress1
}
user_profile_form = UserProfileForm(profile_data, instance=profile)
print("UPF", user_profile_form)
if user_profile_form.is_valid():
print("UPF Valid")
user_profile_form.save()
messages.success(request, f'Order successfully processed! \
Your order number is {order_number}. A confirmation \
email will be sent to {order.emailAddress}.')
if 'cart' in request.session:
del request.session['cart']
template = 'checkout/checkout_success.html'
context = {
'order': order,
}
return render(request, template, context)
这是 Order 和 profie 模型
# Model: Order
class Order(models.Model):
order_number = models.CharField(max_length=35, null=False,editable=False)
user_profile = models.ForeignKey(UserProfile, on_delete=models.SET_NULL,
null=True, blank=True, related_name='orders') # noqa:501
billingName = models.CharField(max_length=250, blank=True)
emailAddress = models.EmailField(max_length=250, blank=True,
verbose_name='Email Adress') # noqa:501
phone = models.CharField(max_length=15, null=False, default=0)
billingCountry = CountryField(blank_label='Country *', null=False,
blank=False) # noqa:501
billingPostcode = models.CharField(max_length=250, blank=True)
billingCity = models.CharField(max_length=250, blank=True)
billingAdress1 = models.CharField(max_length=250, blank=True)
shippingName = models.CharField(max_length=250, blank=True)
shippingAddress1 = models.CharField(max_length=250, blank=True)
shippingCity = models.CharField(max_length=250, blank=True)
shippingPostcode = models.CharField(max_length=250, blank=True)
shippingCountry = CountryField(blank_label='Country *', null=False,
blank=False) # noqa:501
created = models.DateTimeField(auto_now_add=True)
delivery_cost = models.DecimalField(max_digits=8, decimal_places=2,
null=False, default=0) # noqa:501
total = models.DecimalField(max_digits=10, null=True, decimal_places=2,
verbose_name='USD Order Total') # noqa:501
grand_total = models.DecimalField(max_digits=8, decimal_places=2,
null=False, default=0) # noqa:501
original_cart = models.TextField(null=False, blank=False, default='')
stripe_pid = models.CharField(max_length=254, null=False, blank=False,
default='') # noqa:501
def _generate_order_number(self):
return uuid.uuid4().hex.upper()
def update_total(self):
self.total = self.lineitems.aggregate(Sum('lineitem_total'))
['lineitem_total__sum'] or 0
if self.total < settings.FREE_DELIVERY_THRESHOLD:
self.delivery_cost = self.total *
settings.STANDARD_DELIVERY_PERCENTAGE / 100
else:
self.delivery_cost = 0
self.total = self.total + self.delivery_cost
self.save()
def save(self, *args, **kwargs):
if not self.order_number:
self.order_number = self._generate_order_number()
super().save(*args, **kwargs)
def __str__(self):
return self.order_number
and the UserProfile model
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
default_phone = models.CharField(max_length=15, null=True, blank=True)
default_billingAdress1 = models.CharField(max_length=250, blank=True)
default_billingCountry = CountryField(blank_label='Country', null=True,
blank=True)
default_billingPostcode = models.CharField(max_length=250, blank=True)
default_billingCity = models.CharField(max_length=250, blank=True)
def __str__(self):
return self.user.username
Apreciate 如果有人可以帮我看看有什么问题,谢谢
解决方案
推荐阅读
- python - 如何使用 Flask 返回 .find() 作为响应?
- node.js - 使用节点 js 进行条带订阅
- r - R plm 包中关于长度相同但内容不同的索引的警告消息
- python - 以 t 开头但以非 e 结尾的单词
- mysql - 如何在 Woocommerce 中删除具有相同产品 ID 的重复产品?
- python - 列表理解中的列表弹出未获得预期结果
- npm - 从 GitLab npm 包中获取 package.json
- spring-boot - 如何在 Spring Batch 中的每个分区步骤完成后添加 tasklet 以运行
- android - Android Java - Glide 在自定义适配器中不起作用
- javascript - 按 ID 从数组中选择