如何使用默认地址保存在django
how to use default address for saving in django
我有模型名称地址,允许用户创建多个地址,也有设置默认地址的功能,但我无法获取它以保存在模型中任何建议都会有很大帮助谢谢
这里是我的地址模型选择被删除了
class Address(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='address')
reciever_name = models.CharField(max_length=200, blank=False)
phone_no = models.CharField(validators = [phoneNumberRegex], max_length = 10, blank=False)
alt_phone_no = models.CharField(validators = [phoneNumberRegex], max_length = 10, blank=True)
state = models.CharField(max_length=50, choices=state_choice, blank=False)
pincode = models.CharField(validators = [pincodeRegex], max_length = 6, blank=False)
eighteen = models.CharField(blank=False, choices=eighteen_choice, default='Yes', max_length=4 )
city = models.CharField(max_length=100, blank=False)
address = models.CharField(max_length=500, blank=False)
locality = models.CharField(max_length=300, blank=True)
joined_date = models.DateTimeField(default=timezone.now,editable=False)
update_at = models.DateTimeField(auto_now=True)
default = models.BooleanField(("Default"), default=False)
def __str__(self):
return self.user.username
my views.py 用于将地址设置为默认
@login_required
def set_default_address(request, id):
Address.objects.filter(user=request.user, default=True).update(default=False)
Address.objects.filter(pk=id, user=request.user).update(default=True)
return redirect('accounts:home')
我要保存默认地址的模型
class Order(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE,)
item = models.ForeignKey(Item, on_delete=models.CASCADE )
address = models.ForeignKey(Address, default= True, on_delete=models.CASCADE )
status = models.IntegerField(choices = status_choices, default=1)
method = models.CharField(max_length=50, blank=False,)
size = models.CharField(max_length=20, blank=False)
price = models.FloatField(blank=False)
created_at = models.DateField(auto_now=True, editable=False)
payment_status = models.IntegerField(choices = payment_status_choices, default=3)
order_id = models.CharField(unique=True, max_length=200, null=True, default=None)
datetime_of_payment = models.DateTimeField(default=timezone.now)
def save(self, *args, **kwargs):
if self.order_id is None and self.datetime_of_payment and self.id:
self.order_id = self.datetime_of_payment.strftime('COOLBUYORDER%Y%m%dODR') + str(self.id)
return super().save(*args, **kwargs)
def __str__(self):
return self.user.username + " " + str(self.id) + " " + str(self.created_at)
我的views.py获取地址
class Checkout(View):
def post (self, request,):
user = request.user
address = Address.objects.filter(user=request.user)
cart = request.session.get('cart')
items = Item.get_items_by_id(list(cart.keys()))
prefer = request.POST.get('payment')
for item in items:
order = Order(user=user, item=item , method=prefer, **address=address.first()** ,size=cart.get(str(item.id)), price=item.price)
order.save()
request.session['cart'] = {}
return redirect('orders:cart',)
我想保存默认地址而不是第一个地址
我认为你必须这样做:
address = Address.objects.filter(default=True, user=request.user)
基于此你会得到一个queryset
of Address
不能为一或零,那么在你看来你可以做到:
if not address.exists():
# Redirect to set a default address
default_address = address.first()
然后在循环中添加以下内容:
order = Order(user=user, item=item , method=prefer, address=default_address, size=cart.get(str(item.id)), price=item.price)
当然,您可以遵循许多选项,但这是一种您可以实施的解决方案。
我有模型名称地址,允许用户创建多个地址,也有设置默认地址的功能,但我无法获取它以保存在模型中任何建议都会有很大帮助谢谢
这里是我的地址模型选择被删除了
class Address(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='address')
reciever_name = models.CharField(max_length=200, blank=False)
phone_no = models.CharField(validators = [phoneNumberRegex], max_length = 10, blank=False)
alt_phone_no = models.CharField(validators = [phoneNumberRegex], max_length = 10, blank=True)
state = models.CharField(max_length=50, choices=state_choice, blank=False)
pincode = models.CharField(validators = [pincodeRegex], max_length = 6, blank=False)
eighteen = models.CharField(blank=False, choices=eighteen_choice, default='Yes', max_length=4 )
city = models.CharField(max_length=100, blank=False)
address = models.CharField(max_length=500, blank=False)
locality = models.CharField(max_length=300, blank=True)
joined_date = models.DateTimeField(default=timezone.now,editable=False)
update_at = models.DateTimeField(auto_now=True)
default = models.BooleanField(("Default"), default=False)
def __str__(self):
return self.user.username
my views.py 用于将地址设置为默认
@login_required
def set_default_address(request, id):
Address.objects.filter(user=request.user, default=True).update(default=False)
Address.objects.filter(pk=id, user=request.user).update(default=True)
return redirect('accounts:home')
我要保存默认地址的模型
class Order(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE,)
item = models.ForeignKey(Item, on_delete=models.CASCADE )
address = models.ForeignKey(Address, default= True, on_delete=models.CASCADE )
status = models.IntegerField(choices = status_choices, default=1)
method = models.CharField(max_length=50, blank=False,)
size = models.CharField(max_length=20, blank=False)
price = models.FloatField(blank=False)
created_at = models.DateField(auto_now=True, editable=False)
payment_status = models.IntegerField(choices = payment_status_choices, default=3)
order_id = models.CharField(unique=True, max_length=200, null=True, default=None)
datetime_of_payment = models.DateTimeField(default=timezone.now)
def save(self, *args, **kwargs):
if self.order_id is None and self.datetime_of_payment and self.id:
self.order_id = self.datetime_of_payment.strftime('COOLBUYORDER%Y%m%dODR') + str(self.id)
return super().save(*args, **kwargs)
def __str__(self):
return self.user.username + " " + str(self.id) + " " + str(self.created_at)
我的views.py获取地址
class Checkout(View):
def post (self, request,):
user = request.user
address = Address.objects.filter(user=request.user)
cart = request.session.get('cart')
items = Item.get_items_by_id(list(cart.keys()))
prefer = request.POST.get('payment')
for item in items:
order = Order(user=user, item=item , method=prefer, **address=address.first()** ,size=cart.get(str(item.id)), price=item.price)
order.save()
request.session['cart'] = {}
return redirect('orders:cart',)
我想保存默认地址而不是第一个地址
我认为你必须这样做:
address = Address.objects.filter(default=True, user=request.user)
基于此你会得到一个queryset
of Address
不能为一或零,那么在你看来你可以做到:
if not address.exists():
# Redirect to set a default address
default_address = address.first()
然后在循环中添加以下内容:
order = Order(user=user, item=item , method=prefer, address=default_address, size=cart.get(str(item.id)), price=item.price)
当然,您可以遵循许多选项,但这是一种您可以实施的解决方案。