Card() 有一个意外的关键字参数'initial'



我在不使用管理应用程序的情况下将CRUD界面放在一起,这对Python和Django来说仍然很陌生,但是当我去创建一个条目时,它会抛出我的标题中的错误。

这是目标页面:

<form method="post">
{% csrf_token %}
Card Name:<br>
<input type="text" name="name"><br>
Mana Cost:<br>
<input type="text" name="mana_cost"><br>
Supertype:<br>
<input type="text" name="supertype"><br>
Keyword 1:<br>
<input type="text" name="keyword_1"><br>
Keyword 2:<br>
<input type="text" name="keyword_2"><br>
Keyword 3:<br>
<input type="text" name="keyword_3"><br>
Rules Text:<br>
<input type="text" name="rules_text"><br>
Power & Toughness:<br>
<input type="text" name="power_toughness"><br>
<input type="submit" value="Add Card"><br>
{% endblock %}

我 views.py:

from task99_app import forms
from django.views.generic import ListView
from django.views.generic import DetailView
from django.views.generic.edit import CreateView
from django.views.generic.edit import UpdateView
from django.views.generic.edit import DeleteView
from .models import Card
# Create your views here.
def home(request):
return render(request, 'home.html')
class CardList(ListView):
model = Card
class CardCreate(CreateView):
form_class = Card
class CardDetail(DetailView):
model = Card
class CardUpdate(UpdateView):
model = Card
class CardDelete(DeleteView):
model = Card

我 forms.py:

from django import forms

class CardForm(forms.ModelForm):
name = forms.CharField(max_length=80)
mana_cost = forms.CharField(max_length=12)
supertype = forms.CharField(max_length=30)
keyword_1 = forms.CharField(max_length=20)
keyword_2 = forms.CharField(max_length=20)
keyword_3 = forms.CharField(max_length=20)
rules_text = forms.CharField(max_length=500)
power_toughness = forms.CharField(max_length=10)

和我的 models.py:

from django import forms
class CardForm(forms.ModelForm):
name = forms.CharField(max_length=80)
mana_cost = forms.CharField(max_length=12)
supertype = forms.CharField(max_length=30)
keyword_1 = forms.CharField(max_length=20)
keyword_2 = forms.CharField(max_length=20)
keyword_3 = forms.CharField(max_length=20)
rules_text = forms.CharField(max_length=500)
power_toughness = forms.CharField(max_length=10)

我已经看到过一些发生在其他人身上的例子,但我不太了解他们的代码,无法理解如何修复我的代码,但我感觉很接近。

编辑: urls.py:

from django.contrib import admin
from django.urls import path
from django.conf.urls import url
from task99_app import views
urlpatterns = [
url('admin/', admin.site.urls),
url(r'form/$', views.CardCreate.as_view(), name='card_create'),
url(r'^$', views.home, name='home'),
url(r'card_list/$', views.CardList.as_view(), name='card_list'),
url(r'card/<int:pk>', views.CardDetail.as_view(), name='card_details'),
url(r'delete/<int:pk>', views.CardDelete.as_view(), name='card_delete'),
url(r'update/<int:pk>', views.CardUpdate.as_view(), name='card_update'),
]

CardCreate视图中,您已将模型用作form_class,而不是您的Form

class CardCreate(CreateView):
model = Card
form_class =CardForm

编辑1:请注意,在您的UpdateView中,您忘记设置form_class。这本身不是必需的,但是您需要指定fields[Django-doc]。但是,您可以使用相同的form_class

class CardUpdate(UpdateView):
model = Card
form_class =CardForm

此外,您需要在CardForm中指定模型:

class CardForm(forms.ModelForm):
name = forms.CharField(max_length=80)
mana_cost = forms.CharField(max_length=12)
supertype = forms.CharField(max_length=30)
keyword_1 = forms.CharField(max_length=20)
keyword_2 = forms.CharField(max_length=20)
keyword_3 = forms.CharField(max_length=20)
rules_text = forms.CharField(max_length=500)
power_toughness = forms.CharField(max_length=10)
class Meta:
model = Card
fields = '__all__'

编辑2:请注意,在你的urls.py中,你在url(..)s中使用路径语法,你应该使用path(..)[Django-doc]:

urlpatterns = [
path('admin/', admin.site.urls),
path('form/', views.CardCreate.as_view(), name='card_create'),
path('', views.home, name='home'),
path('card_list/', views.CardList.as_view(), name='card_list'),
path('card/<int:pk>', views.CardDetail.as_view(), name='card_details'),
path('delete/<int:pk>', views.CardDelete.as_view(), name='card_delete'),
path('update/<int:pk>', views.CardUpdate.as_view(), name='card_update'),
]

最新更新