【问题标题】:Django how to save/edit json with SplitJSONWidgetDjango 如何使用 SplitJSONWidget 保存/编辑 json
【发布时间】:2016-12-15 08:46:14
【问题描述】:

我正在使用带有 library 的 Django 1.9,如下所示:

models.py:

class Policy(models.Model):
    config = JSONField(max_length=50000, blank=True)
    name = models.CharField(max_length=200, blank=False, unique=True, default="")

    def __unicode__(self):
        return self.name

forms.py:

class PolicyForm(forms.ModelForm):
    class Meta:
        model = Policy
        fields = ('name',)

    attrs = {'class': 'special', 'size': '25'}
    data = forms.CharField(widget=SplitJSONWidget(attrs=attrs, debug=True))

views.py:

def policy_new(request):
    json = {
        "all": {
            "active": True
        }
    }
    if request.method == "POST":
        form = PolicyForm(request.POST)
        if form.is_valid():
        post = form.save(commit=False)
        post.config = form.data
        post.save()
        return redirect('ui:config-list')
    else:
        form = PolicyForm(initial={'data': json})

    template = 'api/policy_template.html'
    context = RequestContext(request, {'form': form})
    return render_to_response(template, context)


def policy_edit(request, pk):
    policy = get_object_or_404(Policy, pk=pk)
    if request.method == "POST":
        form = PolicyForm(request.POST, instance=policy)
        if form.is_valid():
           post = form.save(commit=False)
           post.config = form.data
           post.save()
           return redirect('ui:config-list')
    else:
        form = PolicyForm(instance=policy, initial={'data': policy.config})
    return render(request, 'api/policy_template.html', {'form': form})

我在保存和编辑 json 时遇到问题:

保存:

第一次编辑:

第二次编辑:

如您所见,json 与自身连接并将 crf 令牌和名称添加到 json(wtf?)。保存和编辑功能有什么问题?

【问题讨论】:

    标签: json django django-views


    【解决方案1】:

    问题出在保存过程中,解决方法是:

    post = form.save(commit=False)
    post.config = form.cleaned_data['data']
    post.save()
    

    在 policy_new() 和 policy_edit() 函数中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-01
      • 1970-01-01
      • 2017-11-02
      • 1970-01-01
      相关资源
      最近更新 更多