2015-09-21 45 views
0

我正在學習Django,並且我有ModelForm的問題。所以我有一個名爲mini_url的應用程序。在這個應用程序,我有一個模型:Pb初始化ModelForm

class MiniURL(models.Model): 
    url = models.URLField(unique=True) 
    code = models.CharField(unique=True, max_length=255) 
    date = models.DateTimeField(auto_now_add=True, auto_now=False, verbose_name='Date de création') 
    pseudo = models.CharField(max_length=30) 
    nb_acces = models.IntegerField(default=0) 

我想根據我的模型創建一個表單,所以我在form.py文件這樣做:

from django.forms import ModelForm 
from mini_url.models import MiniURL 


def MiniURLForm(ModelForm): 
    class Meta: 
     model = MiniURL 
     fields = ['url', 'pseudo'] 

然後在我的鑑於我有這樣的:

from django.forms import ModelForm 
from mini_url.models import MiniURL 


def create_url(request): 

    if request.method == 'POST': 
     form = MiniURLForm(request.POST) 
     if form.is_valid(): 
      new_url = MiniURL() 
      new_url.url = form.cleaned_data['url'] 
      new_url.pseudo = form.cleaned_data['pseudo'] 
      new_url.code = generer(5) 
      new_url.save() 

    else: 
     form = MiniURLForm() 

    return render(request, 'mini_url/create_url.html', {'form': form}) 

最後我的模板(mini_url/create_url.html)表示形式爲:

<p> 
    <form action="{% url "mini_url.views.create_url" %}" method="post"> 
     {% csrf_token %} 
     {{ form.as_p }} 
     <input type="submit"/> 
    </form> 
</p> 

但是,當我嘗試acceed到模板我有這樣的錯誤:

MiniURLForm() missing 1 required positional argument: 'ModelForm' 

這也表明了我的錯誤,在我看來,在哪裏有一行:

form = MiniURLForm() 

所以我不明白爲什麼它失敗。我做了什麼文檔說我認爲:https://docs.djangoproject.com/en/1.8/topics/forms/modelforms/#topics-forms-modelforms

任何人都可以幫助我嗎?

+0

標題不是字符限制;你有問題,而不是pb。 –

回答

2

您意外地將MiniURLForm定義爲函數而不是表單類。

變化

def MiniURLForm(ModelForm): # wrong 

class MiniURLForm(ModelForm): # should be a class 

當你定義MiniURLForm的功能,Django的預期位置參數,按您的定義。將其更改爲表單類,它應該可以正常工作。

最終代碼:

class MiniURLForm(ModelForm): 
    class Meta: 
     model = MiniURL 
     fields = ['url', 'pseudo'] 
+1

哦,是的,確切的。謝謝 !我以爲我創建了一個班,但它是一個功能哈哈 – pchmn