Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何正确更新django模型?_Python_Django_Django Orm - Fatal编程技术网

Python 如何正确更新django模型?

Python 如何正确更新django模型?,python,django,django-orm,Python,Django,Django Orm,我在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_hoch

我在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/nameoffile.pdf”的内容,但在保存tmp_obj后,它会变成“nameoffile.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”。不过,当我保存对象时,在数据库中它还是“nameoffile.pdf”

我就是不明白

我看到了回复,请查看。这可能有助于:

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

你从哪里打电话来救我?这里面有什么功能?这是一个类方法吗?亲爱的mattyx17,谢谢你的回复。我希望我不会过早庆祝,但我想我用一个tmp_obj.saveupdate_field=。。。命令:谢谢,正如在其他评论中提到的,我可能已经用update_fields而不是field参数解决了这个问题。但如果我庆祝得太早,我会尝试你的方法:。