我正在学习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
任何人都可以帮助我?
答案 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']