Django 问题 'ModelChoiceField' 对象没有属性 'use_required_attribute'
Django Question 'ModelChoiceField' object has no attribute 'use_required_attribute'
亲爱的,
我在 Django 中遇到了一个问题。
关于'ModelChoiceField' object has no attribute 'use_required_attribute' 的错误,我不知道我在哪里弄错了。
我的目标是使我的提交自定义表单,但我不明白 Django 中的 CBV 是如何实现这个目标的,所以我回去使用 Django 中的 forms.py 和 FBV。但是我在表单模型中的字段有外键来引用其他模型。
我使用 forms.ModelChoiceField
并希望解决外键问题,但它不起作用并显示此错误。
感谢您的阅读,希望有人能帮我解决。
这是我的代码:
forms.py
from django import forms
from .models import Case
from school_app.models import School
from student_app.models import Student
class CaseModelForm(forms.ModelForm):
class Meta:
model = Case
fields='__all__'
widgets = {
'name' : forms.ModelChoiceField(queryset=Student.objects.all()),
'phone' : forms.TextInput(),
'school' :forms.ModelChoiceField(queryset=School.objects.all())
}
models.py
from django.db import models
from django.urls import reverse
import datetime,time
from school_app.models import School
from student_app.models import Student
# Create your models here.
class Case(models.Model):
name=models.ForeignKey(Student,related_name='case_student_name',on_delete=models.CASCADE,verbose_name="姓名")
phone=models.CharField(verbose_name="電話",blank=False,max_length=256)
school=school=models.ForeignKey(School,related_name='case_school',on_delete=models.CASCADE,verbose_name="學校")
views.py
def CaseFormView(request):
print("CaseForm")
form_cus = CaseModelForm()
if request.method == "POST":
form = CaseModelForm(request.POST)
if form.is_valid():
form.save()
return redirect("/")
context={
'form_cus': form_cus
}
return render(request, 'case_app/case_form.html',context)
urls.py
from student_app import views
from django.urls import path
app_name = 'student_app'
urlpatterns=[
path('', views.StudentListView.as_view(),name='list'),
path('<int:pk>/', views.StudentDetailView.as_view(), name='detail'),
path('create/',views.StudentCreateView.as_view(), name='create')]
case_form.html
<form method="post">
{% csrf_token %}
<div class="form-group">
<div class="form-group col-md-6">
<label>{{form_cus.name.label}}</label>
{{form_cus.name}}
</div>
<div class="form-group col-md-6">
<label>{{form_cus.school.label}}</label>
{{form_cus.school}}
</div>
{{form_cus}}
<input type="submit" class="btn btn-primary" value="提交">
</div>
{% if not form.instance.pk %}
<a class='btn btn-secondary' href="{% url 'case_app:list' %}">取消</a>
{% else %}
<a class='btn btn-secondary' href="{% url 'case_app:detail' pk=form.instance.pk %}">取消</a>
{% endif %}
</form>
谢谢!
A ModelChoiceField
是 不是 小部件,它是一个 表单字段 ,因此您可以将其实现为:
from django import forms
from .models import Case
from school_app.models import School
from student_app.models import Student
class CaseModelForm(forms.ModelForm):
<b>school =</b> forms.ModelChoiceField(queryset=School.objects.all())
<b>name =</b> forms.ModelChoiceField(queryset=Student.objects.all())
class Meta:
model = Case
fields='__all__'
widgets = {
'phone' : forms.TextInput(),
}
由于 school
和 name
在您的 Case
模型中是 ForeignKey
,您不需要指定这些:我们可以实现 CaseModelForm
与:
from django import forms
from .models import Case
from school_app.models import School
from student_app.models import Student
class CaseModelForm(forms.ModelForm):
# no school/name field
class Meta:
model = Case
fields='__all__'
widgets = {
'phone' : forms.TextInput(),
}
亲爱的, 我在 Django 中遇到了一个问题。 关于'ModelChoiceField' object has no attribute 'use_required_attribute' 的错误,我不知道我在哪里弄错了。
我的目标是使我的提交自定义表单,但我不明白 Django 中的 CBV 是如何实现这个目标的,所以我回去使用 Django 中的 forms.py 和 FBV。但是我在表单模型中的字段有外键来引用其他模型。
我使用 forms.ModelChoiceField
并希望解决外键问题,但它不起作用并显示此错误。
感谢您的阅读,希望有人能帮我解决。
这是我的代码:
forms.py
from django import forms
from .models import Case
from school_app.models import School
from student_app.models import Student
class CaseModelForm(forms.ModelForm):
class Meta:
model = Case
fields='__all__'
widgets = {
'name' : forms.ModelChoiceField(queryset=Student.objects.all()),
'phone' : forms.TextInput(),
'school' :forms.ModelChoiceField(queryset=School.objects.all())
}
models.py
from django.db import models
from django.urls import reverse
import datetime,time
from school_app.models import School
from student_app.models import Student
# Create your models here.
class Case(models.Model):
name=models.ForeignKey(Student,related_name='case_student_name',on_delete=models.CASCADE,verbose_name="姓名")
phone=models.CharField(verbose_name="電話",blank=False,max_length=256)
school=school=models.ForeignKey(School,related_name='case_school',on_delete=models.CASCADE,verbose_name="學校")
views.py
def CaseFormView(request):
print("CaseForm")
form_cus = CaseModelForm()
if request.method == "POST":
form = CaseModelForm(request.POST)
if form.is_valid():
form.save()
return redirect("/")
context={
'form_cus': form_cus
}
return render(request, 'case_app/case_form.html',context)
urls.py
from student_app import views
from django.urls import path
app_name = 'student_app'
urlpatterns=[
path('', views.StudentListView.as_view(),name='list'),
path('<int:pk>/', views.StudentDetailView.as_view(), name='detail'),
path('create/',views.StudentCreateView.as_view(), name='create')]
case_form.html
<form method="post">
{% csrf_token %}
<div class="form-group">
<div class="form-group col-md-6">
<label>{{form_cus.name.label}}</label>
{{form_cus.name}}
</div>
<div class="form-group col-md-6">
<label>{{form_cus.school.label}}</label>
{{form_cus.school}}
</div>
{{form_cus}}
<input type="submit" class="btn btn-primary" value="提交">
</div>
{% if not form.instance.pk %}
<a class='btn btn-secondary' href="{% url 'case_app:list' %}">取消</a>
{% else %}
<a class='btn btn-secondary' href="{% url 'case_app:detail' pk=form.instance.pk %}">取消</a>
{% endif %}
</form>
谢谢!
A ModelChoiceField
是 不是 小部件,它是一个 表单字段 ,因此您可以将其实现为:
from django import forms
from .models import Case
from school_app.models import School
from student_app.models import Student
class CaseModelForm(forms.ModelForm):
<b>school =</b> forms.ModelChoiceField(queryset=School.objects.all())
<b>name =</b> forms.ModelChoiceField(queryset=Student.objects.all())
class Meta:
model = Case
fields='__all__'
widgets = {
'phone' : forms.TextInput(),
}
由于 school
和 name
在您的 Case
模型中是 ForeignKey
,您不需要指定这些:我们可以实现 CaseModelForm
与:
from django import forms
from .models import Case
from school_app.models import School
from student_app.models import Student
class CaseModelForm(forms.ModelForm):
# no school/name field
class Meta:
model = Case
fields='__all__'
widgets = {
'phone' : forms.TextInput(),
}