0

因此,我为我的一个表单元素创建了一个自定义小部件,并将其呈现为divwhere contenteditable='true',因为我正在为我的网站制作一个简单的 WYSIWYG 编辑器。这是自定义小部件

class DivTextWidget(forms.Textarea):
    def render(self, name, value, attrs=None,renderer=None):
        super().render(name, value, attrs)
        flat_attrs = flatatt(attrs)
        html = """
        <div contenteditable='true' id='%(id)s' name='text'></div>
        """ % {
            'attrs': flat_attrs,
            'id': attrs['id'],
        }
        return mark_safe(html)

现在这里是 Post 模型

class Post(models.Model):
    author = models.ForeignKey(User,related_name='posts',on_delete=models.CASCADE)
    title = models.CharField(max_length=75)

还有更多的模型,但其余的不适用于此。现在这是我的表格。

class PostForm(forms.ModelForm):
    text = forms.CharField(widget=DivTextWidget())
    class Meta():
        model = Post
        fields = ['title','text','group','image','file','tags','spoiler','NSFW','tag']
        widgets = {
            'title':forms.TextInput(attrs={'class':'textinputclass text-title','placeholder':'Title'}),
        }

    def clean(self):
        cleaned_data = super(PostForm, self).clean()
        title = cleaned_data.get('title')
        text = cleaned_data.get('text')

    def __init__(self, *args, **kwargs):
        super(PostForm, self).__init__(*args, **kwargs)
        self.fields['title'].label = ""
        self.fields['text'].label = ""

同样,我从表格中删除了所有不相关的内容。

所以在我的 HTML 中,我已经设置了所有表单并且我知道它可以工作,因为当我有默认的 Textarea 时,一切都很好。

我知道这divs可能根本不通过表单,但我只是想知道是否有任何方法可以让 div 通过表单并被保存。

4

0 回答 0