首页 > 解决方案 > 未在 ModelForm 上呈现脆皮表单

问题描述

我正在尝试使用脆形式呈现 ModelForm 但不工作,我已经尝试了两个标签:( {{ form|crispy }} 和 {% crispy form %} )为什么不工作?

模型.py

class ProfileInfo(models.Model):
    user = models.OneToOneField(User,on_delete=models.CASCADE, unique=True)
    cover_image = models.ImageField(null=True, blank=True,upload_to='cover/')
    profile_image = models.ImageField(null=True, blank=True,upload_to='avatar/')

    def __str__(self):
        return self.user.username.title()

表格.py

class UploadCoverForm(forms.ModelForm):

    class Meta:
        model = ProfileInfo
        fields = ['cover_image']

    def __init__(self, *args, **kwargs):
        super(UploadCoverForm, self).__init__(*args, **kwargs)
        self.helper = FormHelper(self)

视图.py

@login_required
def upload_cover(request):
    user = ProfileInfo.objects.get(user = request.user)

    if request.method == "POST":
        form = UploadCoverForm(request.POST, request.FILES, instance=user)

        if form.is_valid():
            user = form.save(False)

            cover = form.cleaned_data.get("cover_image")
            if cover:
                image = Image.open(cover)
                image_data = BytesIO()
                image.save(fp=image_data, format=image.format)
                image_file = ImageFile(image_data)
                user.cover_image.save('{}.cover.{}'.format(user,image.format), image_file)
            user.save()
            return redirect("user:Profile", request.user.username)
    else:
        form = UploadCoverForm(instance=user)

    return render(request, "uploads/upload_cover.html",{"form": form})

我在“base_uploads.html”中包含了引导程序的链接

upload_cover.html

{% extends "uploads/base_uploads.html" %}
{% load crispy_forms_tags %}

{% block title %} Upload Cover {% endblock %}

{% block content %}

<form method="POST" enctype="multipart/form-data" action="{% url 'user:upload_cover' %}">
    {% csrf_token %}
  {{ form|crispy }}
<button type="submit" class="btn btn-primary btn-md">Upload</button>
</form>

{% endblock %}

设置.py

INSTALLED_APPS = [
    'revealy_admin.apps.RevealyAdminConfig',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'crispy_forms',
    'channels',
    'users',
    'chats',
]

CRISPY_TEMPLATE_PACK = 'bootstrap4'

谢谢

标签: djangodjango-formsdjango-crispy-formsmodelform

解决方案


由于您只渲染一个字段,您可以使用它来代替:

{{ form.field_name|as_crispy_field }}

推荐阅读