2016-12-03 93 views
0

我想從不在視圖相同目錄的模板存儲數據。 我的表單位於mysite/style.html < -data這種形式插入,我想從另一個名爲「services」的應用程序的模型中傳遞它們。'NoneType'對象不可調用django cms

/mysite /是我的根目錄。

<form name = "form" action="{% url 'services.views.add_style' %}" method = "POST" class="form-inline">{% csrf_token %} 
     <div class="col-sm-6 form-group"> 
      <input class="form-control" id="style" name="name" placeholder="style" type="style" required> 
     </div> 
     <div class="col-sm-6 form-group"> 
      <input class="form-control" id="color" name="color" placeholder="color" type="color" required> 
     </div> 

     <input class="form-control" id="positions" name="positions" placeholder="positions" type="positions" required> 
     <input class="form-control" id="font_size" name="font_size" placeholder="font_size" type="font_size" required> 
     <input class="form-control" id="background" name="background" placeholder="background" type="background" required> 
     <input class="form-control" id="font" name="font" placeholder="font" type="font" required> 
     <button class="btn btn-default pull-right" type="submit">Send</button> 
</form> 

比我已經分居的應用程序稱爲 「服務」

這裏是views.py

def add_style(request): 
    if request.method == "POST": 
     style = request.POST.get('style') 
     color = request.POST.get('color') 
     positions = request.POST.get('positions') 
     font_size = request.POST.get('font_size') 
     background = request.POST.get('background') 
     font = request.POST.get('font') 
     Model = style(style=style, color=color, positions=positions, font_size=font_size, background=background, font=font) 
     Model.save() 

    return redirect('/') 

和models.py中

class style(CMSPlugin): 
     style = models.CharField(max_length=30) 
     color=RGBColorField(max_length=30) 
     positions = models.CharField(max_length=30) 
     font_size = models.CharField(max_length=30) 
     background = models.CharField(max_length=100) 
     font = models.CharField(max_length=100) 

     def __str__(self): 
      return self.style 

回溯顯示錯誤在這行

Model = style(style=style, positions=positions, font_size=font_size, background=background, font=font) 

回答

0

的問題是您正在使用的HTML表單: 在這一行:

<input class="form-control" id="style" name="name" placeholder="style" type="style" required> 

被定義爲但在你的views.py name屬性,使用的是:

style = request.POST.get('style') 

所以正確的HTML形式應該是:

<form name = "form" action="{% url 'services.views.add_style' %}" method = "POST" class="form-inline">{% csrf_token %} 
    <div class="col-sm-6 form-group"> 
    <input class="form-control" id="style" name="style" placeholder="style" type="style" required> 
    </div> 
    <div class="col-sm-6 form-group"> 
    <input class="form-control" id="color" name="color" placeholder="color" type="color" required> 
    </div> 

    <input class="form-control" id="positions" name="positions" placeholder="positions" type="positions" required> 
    <input class="form-control" id="font_size" name="font_size" placeholder="font_size" type="font_size" required> 
    <input class="form-control" id="background" name="background" placeholder="background" type="background" required> 
    <input class="form-control" id="font" name="font" placeholder="font" type="font" required> 
    <button class="btn btn-default pull-right" type="submit">Send</button> 
</form> 
0

ÿ您有一個名爲style的類,並且還有一個名爲style的局部變量覆蓋該名稱。

class style(CMSPlugin): 
    ... 

style = request.POST.get('style') # this is None, and also overrides your class 
... 
Model = style(style=style, color=color,) # you are trying to call None() 

如果你按照慣例命名具有標題大小的類,你可以避免這個bug。

class Style(CMSPlugin): # Title case 
    ... 

style = request.POST.get('style') # No shadowing of other variable 
... 
model = Style(style=style, color=color,) 
+0

對於像這樣的情況,當表單直接對應模型時,Django也具有ModelForm。 –

相關問題