【问题标题】:How to change Django model from class using boolean如何使用布尔值从类中更改 Django 模型
【发布时间】:2021-10-27 22:51:16
【问题描述】:

我的 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)

admin.py

class locationAdmin(admin.ModelAdmin):
    readonly_fields = ["orderplaced", "order_sent_time"]

admin.site.register(Location, locationAdmin)

如何让布尔ordersent控制order_sent_time是否为空

我尝试过使用

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?

【问题讨论】:

  • 你能否进一步解释一下这句话:如何让布尔ordersent控制order_sent_time是否为空
  • 如果布尔ordersent 设置为True,那么order_sent_time 将获取当前日期和时间。如果ordersent 为False,则order_sent_time 将不会获取当前日期和时间。是我想做的事

标签: django django-models django-admin


【解决方案1】:

要在 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 设置为运行时日期。否则就没有了。

【讨论】:

    猜你喜欢
    • 2023-03-17
    • 2020-11-08
    • 2018-02-09
    • 2010-10-25
    • 2012-01-09
    • 1970-01-01
    • 2022-01-26
    • 2021-11-28
    相关资源
    最近更新 更多