Как использовать адрес по умолчанию для сохранения в 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)

Конечно, есть много вариантов, которым вы можете следовать, но это своего рода решение, которое вы можете реализовать.

Вернуться на верх