Fieldオブジェクトの変数に値を代入すると、ModelFormがリロードされてデフォルトに再割り当てされないのはなぜですか?Django - Modelフィールドは同じ値を保持します!
ファイル
class CustomFile(ImageFile, FieldFile):
def save(self, name, content, save = True):
if self.field.override_name:
self(CustomFile, self).save(self.field.override_name, content, save = save)
else:
self(CustomFile, self).save(generate_name(self.instance, name), content, save = save)
フィールド
class CustomImageField(ImageField):
attr_class = CustomFile
def __init__(self, overrided_name, *args, **kwargs):
self.overrided_name = overrided_name
super(CustomImageField, self).__init__(*args, **kwargs)
モデル
class Test(models.Model):
email = models.EmailField()
file = CustomImageField()
AdminForm
class TestForm(ModelForm):
def __init__(self, *args, **kwargs):
super(TestForm, self).__init__(*args, **kwargs)
self.old_instance = self.instance
管理
class TestAdmin(Test):
form = TestForm
def save_model(self, request, obj, form, change):
if form.old_instance:
form.old_instance.file.delete(save = True)
form.old_instance.file.field.override_name = form.old_instance.name
obj.save()
admin.site.register(Test, TestAdmin)
私の問題は、私は、サーバーを再起動するまで、私がアップロードするすべての画像は、同じ名前を持つことになります!.. オブジェクトが変更されないのはなぜ?特にFieldオブジェクト...トレースすると同じオブジェクトになります。
私はそうのようにそれを解決してきました:
class CustomFile(ImageFile, FieldFile):
def save(self, name, content, save = True):
if self.field.override_name:
self(CustomFile, self).save(self.field.override_name, content, save = save)
self.field.override_name = None
else:
self(CustomFile, self).save(generate_name(self.instance, name), content, save = save)
私はDjangoの1.2.6、Pythonの2.6とWindowsを使用しています!
なぜカスタムフィールドタイプを作成していますか?あなたはちょうどDjangoのImageField型を使用することはできませんでしたか? –
残念ながら、私は画像、親指、オリジナルを保存しなければなりません(動的生成サム、透かしなど)...この部分は動作します...なぜ私の問題はdjango-adminフォームが同じフィールドオブジェクトを再利用するのですか?それとももっとうまくいったのですか?... – StefanNch