【问题标题】:Django: Why is the Image Field not workingDjango:为什么图像字段不起作用
【发布时间】:2022-01-22 21:57:49
【问题描述】:

早安,

我正在使用 Django 图像字段和用户模型测试一些东西。关键是任何用户都可以上传和更新个人资料图片。但是当我选择一张图片并按上传时,我收到消息“此字段是必填项。所以就好像我什么都没选一样。

\\photo.html

<form method="POST">
    {% csrf_token %}
    {{ form }}
    <button type="submit">Upload</button>
</form>

\\views.py

def photo_view(request):
    try:
        profile = request.user.userimage
    except UserImage.DoesNotExist:
        profile = UserImage(user=request.user)

    if request.method == 'POST':
        form = UserImageForm(request.POST, instance=profile)
        if form.is_valid():
            form.save()
            return redirect('/dashboard/user/profile')
    else:
        form = UserImageForm(instance=profile)

    return render(request, 'photo.html', {'form': form})

\models.py

class UserImage(models.Model):
    user = models.OneToOneField(
        settings.AUTH_USER_MODEL, default=None, null=True, on_delete=models.CASCADE)
    photo = models.ImageField(
        upload_to='images/', height_field=None, width_field=None, max_length=100)

    def __str__(self):
        return str(self.user)

\\settings.py

MEDIA_ROOT =  os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

我试过这个 https://www.geeksforgeeks.org/imagefield-django-models/

有人知道解决方案吗?或者在处理图像时我什至应该使用 ImageField 吗?

非常感谢! :-)

【问题讨论】:

    标签: python django


    【解决方案1】:

    这里有两个问题:如果上传文件,需要指定enctype="multipart/form-data"

    form method="POST" enctype="multipart/form-data">
        {% csrf_token %}
        {{ form }}
        <button type="submit">Upload</button>
    </form>

    此外,您需要将request.POSTrequest.FILES 都传递给表单:

    def photo_view(request):
        try:
            profile = request.user.userimage
        except UserImage.DoesNotExist:
            profile = UserImage(user=request.user)
        
        if request.method == 'POST':
            form = UserImageForm(request.POST, request.FILES, instance=profile)
            if form.is_valid():
                form.save()
                return redirect('/dashboard/user/profile')
        else:
            form = UserImageForm(instance=profile)
    
        return render(request, 'photo.html', {'form': form})

    【讨论】:

    • 这很快,谢谢
    猜你喜欢
    • 2014-12-07
    • 2020-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2016-07-15
    • 1970-01-01
    • 2014-12-30
    相关资源
    最近更新 更多