gpt4 book ai didi

python - 电子商务应用程序中的 Django 用户模型扩展

转载 作者:太空狗 更新时间:2023-10-29 21:57:53 26 4
gpt4 key购买 nike

我有一个 django 电子商务项目,在我决定改进它之前运行良好。我让用户在某些服务上下订单,但每次他们下订单时,他们必须始终输入他们的详细信息(姓名、emil、地址等),所以我决定升级应用程序,以便用户可以添加他们的账单地址,并且可以引用按照顺序或作为客人继续。

型号

class Order(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
email = models.EmailField()
address = models.CharField(max_length=250)
postal_code = models.CharField(max_length=20)
city = models.CharField(max_length=100)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
paid = models.BooleanField(default=False)

class OrderItem(models.Model):
order = models.ForeignKey(Order, related_name='items')
product = models.ForeignKey(Product,related_name='order_items')
price = models.DecimalField(max_digits=10, decimal_places=2)
quantity = models.PositiveIntegerField(default=1)

查看

def order_create(request):
cart = Cart(request)
if request.method == 'POST':
form = OrderCreateForm(request.POST)
if form.is_valid():
order = form.save()
for item in cart:
OrderItem.objects.create(order=order, product=item['product'],price=item['price'], quantity=item['quantity'])
cart.clear()
return render(request,'order/created.html', {'order': order})
else:
form = OrderCreateForm()
return render(request, 'order/create.html',{'cart': cart, 'form': form})

然后我创建了一个帐户应用程序并扩展了 django 用户,这样用户就可以注册地址和手机,这样用户就不必在每次下订单时都输入它。

我的新模型

class Order(models.Model):
account = models.ForeignKey(Account, related_name='user_account')
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
paid = models.BooleanField(default=False)
coupon = models.ForeignKey(Coupon, related_name='orders',null=True,blank=True)
discount = models.IntegerField(default=0,validators=[MinValueValidator(0), MaxValueValidator(100)])

我对如何为我的 View 编码感到困惑。任何帮助都会有所帮助,我也有

def admin_order_detail(request, order_id):
order = get_object_or_404(Order, id=order_id)
#account = Account.objects.filter(request.user)
context = {
'order': order,
}
template = 'order/detail.html'
return render(request,template,context)

能够在管理区域查看订单详细信息,但我只能扩展全名、电子邮件和电话号码。任何帮助,将不胜感激。提前致谢

github上所有代码的副本 https://github.com/Olar19/ecommerce

最佳答案

这是利用内置用户对象的好主意。 Django 非常“内含电池”,这意味着它比 Flask 和我认为用户身份验证系统的很大一部分更开箱即用。

通常,您会使用一对一字段扩展用户对象,该字段在您的上下文中类似于帐户对象。

more detail on one-to-one fields (from the docs)

如果您是 B2B 而非 B2C,那么您可能希望 Account 对象包含公司名称,然后将员工分配到该帐户,其中 Employee 对象将是 User 的扩展。

所以假设 Account 对象看起来像这样:

class Account(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
bio = models.TextField(max_length=500, blank=True)
...

然后您可以从订单对象访问帐户和用户对象。

order = get_object_or_404(Order, id=order_id)
username = order.user_account.username

或权限类型的东西

orders = Order.objects.filter(user_account__user = request.user)

关于python - 电子商务应用程序中的 Django 用户模型扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46993980/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com