2017-01-19 71 views
2

我在我的Django應用程序中使用django-stdimage,它的效果很好,唯一的問題是我想從HTML模板中刪除'Currently'字符串,清除複選框和其餘裝飾。我無法弄清楚如何實現這一點。使用django-stdimage時可以刪除'Currently'標籤嗎?

這裏是我的models.py內StdImageField聲明:

photo = StdImageField(upload_to=join('img', 'agents'), 
         variations={'thumbnail': (100, 100, True)}, default=None, 
         null=True, blank=True,) 

我已看過一些SO回答有關修改ImageField的小部件來使用類ClearableFileInput,但似乎widget屬性不允許爲StdImageField類參數。

有沒有辦法去除所有這些裝飾?

謝謝。

+0

刪除在哪裏?在表單中?在管理員? – Udi

+0

刪除/隱藏它們在HTML模板中。我想我必須在models.py或forms.py – juankysmith

+0

@juankysmith中進行一些修改我可能是錯的,但似乎'StdImageField'只能在模型級別運行。你不能在你的models.py中的Forms.py和'StdImageField'中使用帶有自定義小部件的'ImageField'嗎? – mateuszb

回答

3

StdImageFieldextends Django的ImageField

Django的ImageFielddefines'form_class': forms.ImageField

和Django的forms.ImageField默認控件是:ClearableFileInput

所以,如果你想改變一個model.fields水平這個小工具,你需要擴展StdImageField並覆蓋formfield方法返回form_lassform.field有另一個默認的小部件。

一個簡單的例子,解決方案應該是這樣的:

class NotClearableImageField(forms.ImageField): 
    widget = forms.FileInput 


class MyStdImageField(StdImageField): 
    def formfield(self, **kwargs): 
     kwargs.update({'form_class': NotClearableImageField}) 
     return super(MyStdImageField, self).formfield(**defaults) 

# Now you can use MyStdImageField 
# in your model instead of StdImageField 
class MyModel(models.Model): 
    my_image = MyStdImageField(*args, **kwargs) 

但這將是影響一直延伸ModelForm的改變您的Model(包括Django管理)。

你可能不想那樣做,你可以做的是將這個控件覆蓋僅應用於你需要這個特定行爲的單個formModelForms已經支持這一點:

class MyModelForm(forms.ModelForm): 
    class Meta: 
     model = MyModel 
     fields = '__all__' 
     widgets = { 
      'my_image': forms.FileInput(), 
     } 

現在你可以使用這種形式的類要在其中更改的地方。

+0

謝謝!將字段的小部件設置爲FileInput()就足夠了 – juankysmith

相關問題