Django Summernote clean() 在 DjangoForms 中获得了意外的关键字参数“styles”

问题描述 投票:0回答:3

我有一个托管在 Heroku 上的 Django 应用程序。 我在 Django 表单上安装了 Summernotes,但是,当我提交表单时,出现错误: clean() 有一个意外的关键字参数“styles”

异常位置:/app/.heroku/python/lib/python3.10/site-packages/django_summernote/fields.py,第 18 行,to_python

我可以在本地主机上编辑此文件并删除 styles=STYLES,它将在本地主机上运行,但我无法在 Heroku 上编辑它。

如果我尝试通过管理员进行编辑,也会出现此错误。

我不知道下一步该尝试什么。预先感谢您。

from django.db import models
from django.forms import fields

import bleach
from django_summernote.settings import ALLOWED_TAGS, ATTRIBUTES, STYLES
from django_summernote.widgets import SummernoteWidget

# code based on https://github.com/shaunsephton/django-ckeditor


class SummernoteTextFormField(fields.CharField):
    def __init__(self, *args, **kwargs):
        kwargs.update({'widget': SummernoteWidget()})
        super().__init__(*args, **kwargs)

    def to_python(self, value):
        value = super().to_python(value)
        return bleach.clean(
            value, tags=ALLOWED_TAGS, attributes=ATTRIBUTES, styles=STYLES)


class SummernoteTextField(models.TextField):
    def formfield(self, **kwargs):
        kwargs.update({'form_class': SummernoteTextFormField})
        return super().formfield(**kwargs)

    def to_python(self, value):
        value = super().to_python(value)
        return bleach.clean(
            value, tags=ALLOWED_TAGS, attributes=ATTRIBUTES, styles=STYLES)

我在设置文件中有这个,但它没有做任何事情: 风格 = [ '背景颜色'、'字体大小'、'行高'、'颜色'、'字体系列' ]

我的模型.py

from django.db.models.signals import post_save, post_delete
from django.db import models
from model_utils import Choices
from django.contrib.auth.models import User
from django.conf import settings
User = settings.AUTH_USER_MODEL
import uuid
from django.db.models.deletion import CASCADE
from categories.models import Category
import datetime
from django.core.mail import send_mail
from django import forms
from django.forms import Form
from django_summernote.widgets import SummernoteWidget, SummernoteInplaceWidget
from django_summernote.fields import SummernoteTextFormField, SummernoteTextField



class Job(models.Model):
    owner = models.ForeignKey(
        Profile, on_delete=models.CASCADE, null=True, blank=True)
    title = models.CharField(max_length=300, blank=True, null=True)
    pay = models.CharField(max_length=200, blank=True, null=True)
    location = models.CharField(max_length=300, blank=True, null=True)
    description =SummernoteTextField()
    benefits = models.CharField(max_length=300, blank=True, null=True)
    closingdate = models.DateField( null=True, blank = True)
    apply = models.CharField(max_length=300, blank=True, null=True)
    created = models.DateTimeField(auto_now_add=True)
    id = models.UUIDField(default=uuid.uuid4, unique=True,
        

表格.py

from django_summernote.widgets import SummernoteWidget, SummernoteInplaceWidget
from django_summernote.fields import SummernoteTextFormField, SummernoteTextField

class JobForm(ModelForm):
    class Meta:
        model = Job
        fields = ['title', 'pay', 'location', 'description', 'benefits', 'apply']
        labels = {'title': 'Title', 'pay': 'Pay', 'location':'Location', 'description': 'Description', 'benefits':'Benefits & Healthcare',  'apply': 'How to apply'}

工作表.py

{% extends 'main.html' %}
<head>
  <link href="https://cdnjs.cloudflare.com/ajax/libs/summernote/0.8.9/summernote-bs5.css" rel="stylesheet">
  <script src="https://cdnjs.cloudflare.com/ajax/libs/summernote/0.8.9/summernote-bs5.js"></script>

    ...
    {{ form.media }}
</head>
{% block content %}

<div class="container">
  <div class="row justify-content-center">
    <div class="col-lg-6 col-12">
      <div class="section__header style-2 text-center wow fadeInUp" data-wow-duration="1.5s">


    <div class="container">
            <div class="main-content">

            </div>
</div>
</div>
<!-- Main Section -->

<main class="formPage my-xl">
  <div class="container">
    <div class="row justify-content-center">
      <h3>Create Job</h3>
    <div class="content-box">
        <div class="formWrapper">
            <a class="backButton" href="{% url 'account' %}"><i class="im im-angle-left"></i></a>
            <br>

            <form class="form-group" method="POST" action="{% url 'create-job' %}" enctype="multipart/form-data">
                {% csrf_token %}

                {% for field in form %}
                <div class="form__field">
                    <label for="formInput#text">{{field.label}}</label>
                    {{field}}
                </div>
                {% endfor %}
                <div>
                  <br>
                  </div>



                <input class="default-btn" type="submit" value="Submit" />
            </form>
            <div>
              <br>
              </div>
        </div>
    </div>
  </div>
</div>
</main>
</div>
</div>  </div>


{% endblock content %}
python django heroku django-forms summernote
3个回答

1
投票

您遇到的错误是由于 Django Summernote 和 Bleach 库之间的兼容性问题造成的。 Bleach 在 4.0 版本中引入了重大更改,这影响了与 Django Summernote 的集成。

要解决此问题,您必须安装兼容版本的漂白剂。

卸载当前版本的 Bleach:

pip uninstall bleach

安装旧版本的 Bleach:

pip install bleach==3.3.1

0
投票

在您的

models.py
中使用常规 TextField 而不是 SummernoteTextField。

© www.soinside.com 2019 - 2024. All rights reserved.