我有一个模型FileField,其中包含用户上传的文件.由于我想节省空间,我想避免重复.
我想要实现的目标:
1和2已经可以使用了,但是如何忘记上传的副本并使用现有文件呢?
请注意,我想保留现有文件而不是覆盖它(主要是为了保持修改时间相同 - 更好的备份).
笔记:
django.core.files.uploadhandler.TemporaryFileUploadHandler码:
def media_file_name(instance, filename):
h = instance.md5sum
basename, ext = os.path.splitext(filename)
return os.path.join('mediafiles', h[0:1], h[1:2], h + ext.lower())
class Media(models.Model):
orig_file = models.FileField(upload_to=media_file_name)
md5sum = models.CharField(max_length=36)
...
def save(self, *args, **kwargs):
if not self.pk: # file is new
md5 = hashlib.md5()
for chunk in self.orig_file.chunks(): …Run Code Online (Sandbox Code Playgroud) 我正在写一个配色方案编辑器.对于方案的预览,我使用文本小部件,其中我插入带有相应颜色标签的文本(我以编程方式生成).
我想要的是以下行为:
现在这是我的问题:
当我单击标记文本时,将调用标记的回调.到现在为止还挺好.但是,也调用了文本小部件的回调,尽管我在标签回调方法中返回"break"(应该停止进一步的事件处理).我怎么能阻止这个?
为了说明这个具体问题,我写了这个工作示例(对于Python 2和3):
#!/usr/bin/env python
try:
from Tkinter import *
from tkMessageBox import showinfo
except ImportError:
from tkinter import *
from tkinter.messagebox import showinfo
def on_click(event, widget_origin='?'):
showinfo('Click', '"{}"" clicked'.format(widget_origin))
return 'break'
root = Tk()
text = Text(root)
text.pack()
text.insert(CURRENT, 'Some untagged text...\n')
text.bind('<Button-1>', lambda e, w='textwidget': on_click(e, w))
for i in range(5):
tag_name = 'tag_{}'.format(i)
text.tag_config(tag_name)
text.tag_bind(tag_name, '<Button-1>',
lambda e, w=tag_name: on_click(e, w))
text.insert(CURRENT, tag_name + ' ', tag_name)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏!
编辑:尝试Python 2.
我经常使用这个成语'{var_name}'.format(**vars(some_class)).
但是,当我使用属性时,我无法使用它来获取属性值.
考虑这个程序:
#!/usr/bin/env python
class Foo(object):
def __init__(self):
self._bar = None
self.baz = 'baz here'
@property
def bar(self):
if not self._bar:
# calculate some value...
self._bar = 'bar here'
return self._bar
if __name__ == '__main__':
foo = Foo()
# works:
print('{baz}'.format(**vars(foo)))
# gives: KeyError: 'bar'
print('{bar}'.format(**vars(foo)))
Run Code Online (Sandbox Code Playgroud)
题:
有没有办法通过**vars(some_class)?访问属性值?