Pb初始化ModelForm

时间:2015-09-21 16:31:11

标签: python django

我正在学习Django,我遇到了ModelForm的问题。所以我有一个名为 mini_url 的应用程序。在这个应用程序中,我有一个模型:

5*2

我想根据我的模型创建一个表单,所以我在 form.py 文件中创建了这个:

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)

然后在我看来我有这个:

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


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

最后我的模板( mini_url / create_url.html )显示表单:

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

但是当我尝试加入模板时,我遇到了这个错误:

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

它向我显示错误在我看来的那一行:

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

所以我不明白为什么会失败。我做了我认为的文档:https://docs.djangoproject.com/en/1.8/topics/forms/modelforms/#topics-forms-modelforms

任何人都可以帮助我?

1 个答案:

答案 0 :(得分: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']