<p>如果您想在上传到django后端之前验证维度,我认为您必须使用带有javascript的自定义小部件。你知道吗</p>
<p>像这样的方法可能有用:</p>
<pre><code>class CustomImageInput(widgets.FileInput):
def __init__(self, max_width, max_height, attrs=None):
super(CustomImageInput, self).__init__(attrs)
self.attrs.update({
'data-max-width': max_width,
'data-max-height': max_height,
'class': 'custom-image-widget'
})
class Media:
js = ('custom_image_widget.js',)
</code></pre>
<p><code>custom_image_widget.js</code>将包含如下内容:</p>
<pre><code>window.URL = window.URL || window.webkitURL;
$(document).ready(function() {
$(".custom-image-widget").change(function(e) {
var data = $(this).data(),
maxWidth = data.maxWidth,
maxHeight = data.maxHeight;
if ((file = this.files[0])) {
var img = new Image();
img.src = window.URL.createObjectURL( file );
img.onload = function() {
var width = img.naturalWidth,
height = img.naturalHeight;
window.URL.revokeObjectURL( img.src );
if( width > maxWidth || height > maxHeight ) {
// Show error message
$(this).val("");
}
};
}
}
$(".custom-image-widget").each(function() {
var data = $(this).data(),
maxWidth = data.maxWidth,
maxHeight = data.maxHeight;
});
});
</code></pre>
<p>然后需要将此小部件附加到管理模型ImageField:</p>
<pre><code>class BannerAdminForm(forms.ModelForm):
class Meta:
model = Banner
widgets = {
'image': CustomImageInput(max_height=400, max_width=300),
}
fields = '__all__'
class BannerAdmin(admin.ModelAdmin):
form = BannerAdminForm
</code></pre>
<p>我将javascript基于<a href="https://stackoverflow.com/a/13572240/6394346">this answer</a></p>