2016-08-09 78 views
3

I`m mit Django 1.9 mit diesem library, wie folgend:Django wie bearbeiten/json speichern mit SplitJSONWidget

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}) 

Ich habe ein Problem mit dem Speichern und Bearbeiten der json:

Ersparnis:

enter image description here

Bearbeiten erstes Mal: ​​

enter image description here

Bearbeiten zweites Mal: ​​

enter image description here

Wie Sie die json sehen kann, ist mit sich selbst verkettet und das Hinzufügen des CRF-Token und den Namen der json (wtf?). Was ist falsch an den Speicher- und Bearbeitungsfunktionen?

Antwort

0

Das Problem war in der Speichervorgang und die Lösung ist:

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

In beiden policy_new() und policy_edit() Funktionen.