Как использовать адрес по умолчанию для сохранения в 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 для получения адреса
Я думаю, вы должны сделать что-то вроде этого:
address = Address.objects.filter(default=True, user=request.user)
Исходя из этого, вы получите queryset
из 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)
Конечно, есть много вариантов, которым вы можете следовать, но это своего рода решение, которое вы можете реализовать.