Recording a query within a model

I want to write a query in which, if the status Complete is all true, then complete inside the Order model should automatically be true. Can I write a query inside the Order model using some methods or something else? And can you offer any help.

class Order(models.Model):
customer = models.ForeignKey(Customer , on_delete=models.SET_NULL , 
null= True , blank = True)
date_ordered = models.DateTimeField(auto_now_add = True)
complete = models.BooleanField(default=False)
transaction_id = models.CharField(max_length= 100 , null=True)



class CompleteStatus(models.Model):
order = models.ForeignKey('Order', on_delete=models.SET_NULL , 
null=True)
seller = models.BooleanField(default=False)
warehouse =models.BooleanField(default=False)
pickup = models.BooleanField(default=False)
delivered =  models.BooleanField(default=False)
received_by_customer =  models.BooleanField(default=False)
class Order(models.Model): customer = models.ForeignKey(Customer , on_delete=models.SET_NULL , null= True , blank = True) date_ordered = models.DateTimeField(auto_now_add = True) complete = models.BooleanField(default=False) transaction_id = models.CharField(max_length= 100 , null=True) class CompleteStatus(models.Model): order = models.ForeignKey('Order', on_delete=models.SET_NULL , null=True) seller = models.BooleanField(default=False) warehouse =models.BooleanField(default=False) pickup = models.BooleanField(default=False) delivered = models.BooleanField(default=False) received_by_customer = models.BooleanField(default=False)

Как я понимаю, вы хотите, чтобы при сохранении объекта CompleteStatus вы проверяли, все ли булевы поля равны True. Если да, то вы устанавливаете Order.complete значение True.

В этом случае вы можете просто отредактировать метод save:

class CompleteStatus(models.Model):
    order = models.ForeignKey('Order', on_delete=models.SET_NULL, null=True)
    seller = models.BooleanField(default=False)
    warehouse = models.BooleanField(default=False)
    pickup = models.BooleanField(default=False)
    delivered = models.BooleanField(default=False)
    received_by_customer = models.BooleanField(default=False)

    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)
        if self.order and self.warehouse and self.pickup and self.delivered and self.received_by_customer:
            self.order.complete = True
            self.order.save(update_fields=['complete'])

Вы также можете сделать:

class Order(models.Model):
    ...

    @property
    def complete(self):
        if complete_status := self.completestatus
            return complete_status.warehouse and complete_status.pickup and complete_status.delivered and complete_status.received_by_customer

print(order.complete)
# True

но тогда вы не сможете фильтровать по значению,

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