2017-01-19 40 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

相关问题