【问题标题】:How can I update correctly a django model?如何正确更新 django 模型?
【发布时间】:2020-11-05 00:19:29
【问题描述】:

我在 Django 中有这个模型:

    dms_dok_titel = models.CharField(max_length=255, blank=True)
    dms_dok_beschreibung = models.CharField(max_length=3000, blank=True, null=True)
    dms_dok_datei = models.FileField(max_length=255,upload_to='DMS/')
    dms_dok_hochgeladen_am = models.DateField()
    dms_dok_indiziert = models.BooleanField(default=False)
    dms_dok_gehoert_zu_app = models.CharField(max_length=255, choices=app_choices, blank=False, null=False)
    dms_dok_typ = models.CharField(max_length=255, choices=typ_choices, blank=False, null=False, default='Sonstiges')

    def save(self, *args, **kwargs):
        preserve_ext = extension(self.dms_dok_datei.name)
        neuer_dateiname = self.dms_dok_gehoert_zu_app + '_' + self.dms_dok_titel + '_' + self.dms_dok_hochgeladen_am.strftime("%d.%m.%Y")
        self.dms_dok_datei.name = neuer_dateiname + preserve_ext
        super(DMS_Dokument, self).save(*args, **kwargs)

    def delete(self):
        self.indexes.all().delete()
        super(DMS_Dokument, self).delete()

    class Meta:
        app_label = 'DMS'

在我的代码的另一个地方,我对这个类中的对象做了一些事情,我只想更新一个字段 (dms_dok_indiziert)。

所以我想我可以将这个对象的值 (tmp_obj) 设置为 true,然后执行 tmp_obj.save()。但无论出于何种原因,它总是会弄乱我在数据库中的文件名。通常的上传脚本会生成类似“DMS/nameofthefile.pdf”的内容,但在保存 tmp_obj 后它会变成“nameofthefile.pdf”。

我试过了:

tmp_obj.dms_dok_datei.name = 'foo'
#tmp_obj.dms_dok_datei.name = 'DMS/' + tmp_obj.dms_dok_datei.name
print(tmp_obj.dms_dok_datei.name)
tmp_obj.save()

是的,它会打印“foo”。不过,当我保存对象时,在数据库中它又是“nameofthefile.pdf”。

我只是不明白。 :(

【问题讨论】:

  • 你从哪里调用保存?这里面是什么功能?是类方法吗?
  • 亲爱的 mattyx17,感谢您的回复。我希望我不会过早庆祝,但我想我用 tmp_obj.save(update_field=...) 命令解决了这个问题。 :)

标签: python django django-orm


【解决方案1】:

我看到了回复here,请查看。这可能会有所帮助:

tmp_obj.dms_dok_datei.name = "name_you_want"
tmp_obj.dms_dok_datei.field.upload_to = 'DMS/'
tmp_obj.save()

【讨论】:

  • 谢谢,正如另一条评论中提到的,我可能已经用 update_fields(不是字段)参数解决了这个问题。但如果我庆祝得太早,我会尝试你的方法:)。
猜你喜欢
  • 2012-09-04
  • 1970-01-01
  • 2019-09-23
  • 1970-01-01
  • 2014-08-13
  • 1970-01-01
  • 2021-09-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多