【问题标题】:How to insert Rich text box data using ModelForm in Django?如何在 Django 中使用 ModelForm 插入富文本框数据?
【发布时间】:2020-02-12 16:27:57
【问题描述】:

我一直在尝试使用Django Rich text field Django 中的富文本字段将数据插入数据库 就目前而言,我已经能够让该字段在我的表单上工作没有问题,但是当我尝试使用 ModelFrom 将其链接到我的模型和所有其他列时,我没有运气。 此表单位于与管理面板完全分开的面板上,在其中可以正常工作。

我的模型设置为接受表单。

class Vulnerability(models.Model):
title = models.CharField(max_length=200, null=True)
CVSS = models.DecimalField(max_digits=2, decimal_places=1, null=True)
summary = RichTextField(blank=True)
remediation = RichTextField(blank=True)
impact = RichTextField(blank=True)
References = RichTextField(blank=True)
CVE = models.CharField(max_length=30, null=True)
Software = models.CharField(max_length=100, null=True)
method = RichTextField(blank=True)
Tags = models.CharField(null=True, max_length=200)

我的 forms.py 已为该字段设置以使用正确的小部件(这可能是问题所在) 我不完全确定如何以这种方式设置富文本字段,并且在文档中找不到它。

class vulnform(ModelForm):
class Meta:
    model = Vulnerability
    fields = ['Tags', 'CVSS', 'CVE', 'Software', 'title','summary']
    widgets = {
        'title': TextInput(attrs={'class': 'form-control'}),
        'CVE': TextInput(attrs={'class': 'form-control'}),
        'Software': TextInput(attrs={'class': 'form-control'}),
        'Tags': TextInput(attrs={'class': 'form-control'}),
        'CVSS': NumberInput(attrs={'class': 'form-control','max':10,'min':0}),
        'summary' : RichTextWidget()

    }

我的看法。 py 看起来像这样:

类仪表板(模板视图): template_name = 'vuln_pages/Create_Vuln.html'

def get(self, request):
    Outform = {
                # 'Remediation': Remediation,
                 #'References': References,
                 #'Impact': impactform,
                 'vulnform': vulnform,

                 }
    return render(request, self.template_name, Outform)

在显示 from 中的其他字段时正确呈现。我在我的模板中渲染它们,如下所示:

                            <div class="col-lg-3">
                            <div class="form-group">
                                {{ vulnform.CVE }}
                            </div>
                        </div>

我正在尝试像这样渲染富文本框

                                {{ vulnform.summary }}

我之前让它们工作过,但是当数据与 formform.py 中的所有其他列位于一个单独的类中时,我担心当我尝试将它们从发布请求中保存时,它们会被保存在不同的数据库中的行。

当我将输入框放入模板 HTML 中时,它会在 HTML 中呈现一个文本框,但似乎没有为富文本框加载任何 JS。

<textarea name="summary" cols="40" rows="10" class="djrichtextfield" id="id_summary"></textarea>

我尝试手动将 javascript 链接到页面,但没有成功。

【问题讨论】:

    标签: python django jinja2 richtextbox


    【解决方案1】:

    您通常需要在表单模板顶部添加 {{ vulnform.media }} 之类的内容。这就是它插入所需的 CSS 和 JS 以正确呈现表单的地方。我尝试查看那个特定的 repo,但令人惊讶的是它并没有解释这一点。

    Django docs mention how form/widget media is added to a form and then how to add it to the template.

    【讨论】:

    • 即使当我加载媒体时,它也只会作为文本框而不是富文本框加载到页面。它似乎确实加载了脚本,媒体似乎加载得很好,但仍然没有富文本框。
    • 我尝试使用 {{vulnform.summary.as_p}} 加载汇总字段,但是当我这样做时,我什至没有加载输入框。
    • 该项目说它可以与至少 2 种不同的富文本编辑器一起使用,所以也许您必须先指定哪一种才能使用?
    • 是的,您可以在 settings.py 中执行此操作。我没有那个。在我切换到富文本框的不同插件后,它现在可以工作了。感谢您的帮助。
    【解决方案2】:

    将我的插件切换到: django-ckeditor 一切正常。 好像是插件的问题。

    【讨论】:

    • 如果你设置正确的话,它也提供文件/图像上传。
    【解决方案3】:
    in template add 
    <div class="col-lg-3">
                                <div class="form-group">
                                    {{ vulnform.CVE }}
                                </div>
                            </div>
    
                                    {{ vulnform.summary }}
                                    {{ vulnform.media }} #Here
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-30
      • 2022-06-18
      • 2010-12-21
      • 1970-01-01
      • 1970-01-01
      • 2011-02-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多