我正在Django应用程序中使用django-stdimage,它工作得很好,唯一的问题是我想从HTML模板中删除'current'字符串、clear复选框和其他装饰。我想不出怎么做到这一点。
下面是mymodels.py中的StdImageField声明:

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

我已经阅读了一些关于修改ImageField小部件以使用类ClearableFileInput的回答,但是似乎不允许将widget属性作为类参数。
有没有办法去掉这些装饰?
谢谢您。

最佳答案

Django的StdImageFieldextends
Django's公司
Django的默认小部件是:ImageField
因此,如果要在ImageField级别上更改此小部件,则需要扩展'form_class': forms.ImageField并重写forms.ImageField方法以返回具有另一个默认小部件的ClearableFileInput
一个简单的示例解决方案应该如下所示:

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)

但这将是一个影响所有扩展您的model.fields(包括Django管理员)的更改。
您可能不想这样做,您可以做的是将这个小部件覆盖仅应用于您想要这种特定行为的单个StdImageFieldformfield已经支持:
class MyModelForm(forms.ModelForm):
    class Meta:
        model = MyModel
        fields = '__all__'
        widgets = {
            'my_image': forms.FileInput(),
        }

现在您可以在需要更改的地方使用这个表单类。

10-02 09:10