【问题标题】:How can I make a django datetime field dependent on another field?如何使 django 日期时间字段依赖于另一个字段?
【发布时间】:2014-01-16 10:15:13
【问题描述】:

我有一个模型和模型形式定义如下

class Article(models.Model):
    is_draft = models.BooleanField(default=True)
    date_published = models.DateTimeField(editable=False, blank=True, null=True)

    def save(self, *args, **kwargs):
        if (self.is_draft == False) and (self.date_published == None):
            self.date_published = datetime.now()
        super().__init__(*args, **kwargs)

class ArticleForm(models.ModelForm):
    class Meta:
        fields = ['is_draft']

    def save(self, force_insert=False, force_update=False, commit=True):
        article = Article(**self.cleaned_data)
        article.save()

奇怪的是,当我将自定义保存方法添加到模型时,ArticleForm 中保存方法的参数会传递给它。也就是说,force_insert=False、force_update=False 也被传递到 Article save 方法中。为什么会这样?

【问题讨论】:

  • 我会查看 self.cleaned_data 看看它是否有 force_**
  • 运行你的代码,无法重现问题:Article.save() 没有得到force_insertforce_update 参数。您能否提供传递给表单和模型保存方法的参数列表?

标签: django django-models django-forms


【解决方案1】:

ArticleForm.save() 参数不会在 Article.save() 方法中使用,除非您显式传递它们。 force_insertforce_update 是默认的 Model.save() 参数,如 Django model save documentation 中所述。它们的值取决于您如何调用Model.save() 方法。

此外,您的文章保存方法应如下所示:

class Article(models.Model):
    ...
    def save(self, *args, **kwargs):
        if (self.is_draft == False) and (self.date_published == None):
            self.date_published = datetime.now()
        super(Article, self).save(*args, **kwargs)

【讨论】:

    猜你喜欢
    • 2019-01-20
    • 2019-03-11
    • 2019-02-16
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多