Django ';ImageField';对象没有属性';来自_datadict的值';

Django ';ImageField';对象没有属性';来自_datadict的值';,django,django-forms,django-views,Django,Django Forms,Django Views,当我选择编辑时,我正在尝试在“CreateDealPerform”中弹出字段。到目前为止,我只能填充特色图片字段,如果我将特色图片添加到widgets字典,我会得到:“ImageField”对象没有属性“value\u from\u datadict” forms.py class CreateDealerForm(forms.ModelForm): class Meta: model = Dealer fields = ('name', 'phone',

当我选择编辑时,我正在尝试在“CreateDealPerform”中弹出字段。到目前为止,我只能填充
特色图片
字段,如果我将
特色图片
添加到widgets字典,我会得到:
“ImageField”对象没有属性“value\u from\u datadict”

forms.py

class CreateDealerForm(forms.ModelForm):
    class Meta:
        model = Dealer
        fields = ('name', 'phone','website', 'address', 'featured_image',)
        widgets = {
            'name': forms.TextInput(attrs={'class': 'dealer-name-field', 'placeholder': 'Dealer name'}),
            'phone': forms.TextInput(attrs={'class': 'dealer-phone-field', 'placeholder': 'Dealer phone'}),
            'website': forms.TextInput(attrs={'class': 'dealer-website-field', 'placeholder': 'Dealer website'}),
            'address': forms.TextInput(attrs={'class': 'dealer-address-field', 'placeholder': 'Dealer address'}),
            "featured_image": forms.ImageField(),
        }
def update_dealer_view(request, slug):
    instance = get_object_or_404(Dealer, slug=slug)
    form = CreateDealerForm(request.POST, request.FILES, instance=instance)
    if form.is_valid():
        dealer = form.save(commit=False)
        dealer.save()
        return redirect('main:homepage_view')

    context = {
        "title": "Update - Dealer",
        "form": form,
        "instance": instance,
    }
    return render(request=request, template_name="main/create/create_dealer.html", context=context)
视图.py

class CreateDealerForm(forms.ModelForm):
    class Meta:
        model = Dealer
        fields = ('name', 'phone','website', 'address', 'featured_image',)
        widgets = {
            'name': forms.TextInput(attrs={'class': 'dealer-name-field', 'placeholder': 'Dealer name'}),
            'phone': forms.TextInput(attrs={'class': 'dealer-phone-field', 'placeholder': 'Dealer phone'}),
            'website': forms.TextInput(attrs={'class': 'dealer-website-field', 'placeholder': 'Dealer website'}),
            'address': forms.TextInput(attrs={'class': 'dealer-address-field', 'placeholder': 'Dealer address'}),
            "featured_image": forms.ImageField(),
        }
def update_dealer_view(request, slug):
    instance = get_object_or_404(Dealer, slug=slug)
    form = CreateDealerForm(request.POST, request.FILES, instance=instance)
    if form.is_valid():
        dealer = form.save(commit=False)
        dealer.save()
        return redirect('main:homepage_view')

    context = {
        "title": "Update - Dealer",
        "form": form,
        "instance": instance,
    }
    return render(request=request, template_name="main/create/create_dealer.html", context=context)

当请求方法为GET时(当您第一次呈现表单供用户编辑值时),您没有处理这种情况。您需要处理这种情况,而不是将数据传递给表单,或者在不需要时执行验证

def update_dealer_view(request, slug):
    instance = get_object_or_404(Dealer, slug=slug)
    if request.method == 'POST':
        form = CreateDealerForm(request.POST, request.FILES, instance=instance)
        if form.is_valid():
            dealer = form.save()
            return redirect('main:homepage_view')
    else:
        form = CreateDealerForm(instance=instance)
    context = {
        "title": "Update - Dealer",
        "form": form,
        "instance": instance,
    }
    return render(request=request, template_name="main/create/create_dealer.html", context=context)

从小部件中删除“特色图片”。如果它已经是一个文件或图像字段,那么您不需要设置它的小部件manually@IainShelvington我之所以尝试这样做,是因为我想预览图像,并按照这篇文章的答案
forms.ImageField
不是一个小部件,它是一个表单字段