Как изменить модель Django из класса с помощью булеана

У меня есть класс location в моем models.py

class Location(models.Model):
    ...
    orderplaced = models.DateTimeField(auto_now_add=True, blank=True)
    ordersent = models.BooleanField(default=False)
    order_sent_time = models.DateTimeField(auto_now=True, blank=True)

Как сделать так, чтобы булево ordersent контролировало, если order_sent_time пустой или нет

enter image description here

Я пробовал использовать

if ordersent:
    order_sent_time = models.DateTimeField(auto_now=True, blank=True)
else:
    order_sent_time = models.DateTimeField(null=True, blank=True)

Как я могу заставить булево значение влиять на order_sent_time?

Чтобы динамически установить некоторое значение объекта в Django, вы можете переопределить метод save() :

# Assume that (USE_TZ=True) in settings file
from django.utils import timezone

class Location(models.Model):
    ...
    orderplaced = models.DateTimeField(auto_now_add=True, blank=True)
    ordersent = models.BooleanField(default=False)
    order_sent_time = models.DateTimeField(null=True, blank=True)

    def save(self, *args, **kwargs):
        # If ordersent is True then set order_sent_time to now
        if ordersent:
            self.order_sent_time = timezone.now()
        super(Location, self).save(*args, **kwargs) 
        return self

Примечание : Каждый раз, когда вы создаете или редактируете объект Location, он будет проверять, если переменная ordersent равна True, то order_sent_time будет установлена на дату выполнения. В противном случае она не будет иметь значения.

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