如果我使用 ModelForm,是否需要手动处理上传的文件?

Do I need to handle uploaded files manually if I use a ModelForm?

我有一个模型:

class Dialogue(models.Model):
    ...
    avatar = models.ImageField(upload_to=conference_directory_path, blank=True)
    ...

以及它的 ModelForm:

class CreateConferenceForm(forms.ModelForm):
    class Meta:
        model = Dialogue
        fields = ['name', 'participants', 'avatar']
    ...

我的问题是我是否需要为处理上传的头像制作一个特殊功能,例如:

def handle_uploaded_file(file):
    with open(some_file_path, 'wb+') as destination:
        for chink in file.chunks():
            destination.write(chunk)

或者我可以毫不畏惧地使用ModelForm的save方法? 如果我做不到 - 这个功能在哪里更好:在视图中还是在表单中?它看起来如何 - 使用句柄功能保存头像?一开始我使用 handle 函数处理上传的文件,然后如何将上传的文件添加到 imagefield?

只要您的表单使用 method="post" 并且您在表单上设置了 enctype="multipart/form-data",ModelForm 就会为您处理。您可能还想在模型字段上设置 null=True,否则当您不提供图像时实例将不会保存。