【问题标题】:Set a value in Model field based on another value from other model根据来自其他模型的另一个值在模型字段中设置一个值
【发布时间】:2020-03-06 18:09:20
【问题描述】:

我有两个模型,其中一个与其他实体有 ForeignKey 关系。问题是 ModelB 中 data_start 字段中的日期不能等于且大于 ModelA 中 date_end 中的日期。如何在 ModelB 中进行此比较(规则)并保存?

class ModelB(models.Model):
    date_start = models.DateTimeField('')
    date_end = models.DateTimeField('')

class ModelA(models.Model):
    name = models.CharField(...)
    date_start = models.DateTimeField('')
    date_end = models.DateTimeField('')
    resource = models.ForeignKey(ModelB,...)

【问题讨论】:

    标签: python django python-3.x django-models


    【解决方案1】:

    我认为从ModelA 检查这个条件更正确,因为在您的结构中,一个ModelB 实例可以有多个ModelA 实例,并且不清楚与ModelA 的哪个变体比较在这种情况下是日期。

    所以override save() methodModelA 并检查那里的条件

    class ModelA(models.Model):
        name = models.CharField(...)
        date_start = models.DateTimeField('')
        date_end = models.DateTimeField('')
        resource = models.ForeignKey(ModelB,...)
    
        def save(self, *args, **kwargs):
            if self.date_end <= self.resource.date_start:
                raise Exception("resource.date_start can't be equal or grater then date_end")
            super().save(*args, **kwargs)
    

    【讨论】:

    • 在modelA中这样做是有意义的,因为我在考虑以下流程:用户通过表单创建modelA的实例,所以当用户从modelA中选择日期时,它会选择一个日期来自modelB,所以什么时候保存比较会发生
    猜你喜欢
    • 2013-11-13
    • 2021-10-12
    • 2021-01-31
    • 2014-07-20
    • 2017-02-28
    • 1970-01-01
    • 2021-04-30
    • 2016-01-02
    • 2019-04-15
    相关资源
    最近更新 更多