因此,我为我的一个表单元素创建了一个自定义小部件,并将其呈现为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 通过表单并被保存。