Python Django问题';型号选择字段';对象没有属性';使用“必需”属性';

Python Django问题';型号选择字段';对象没有属性';使用“必需”属性';,python,django,modelchoicefield,Python,Django,Modelchoicefield,亲爱的, 我在Django遇到了一个问题。 “ModelChoiceField”对象没有属性“use\u required\u attribute”时出错,我不知道哪里出错 我的目标是让我的提交定制表单,但我不明白Django中的CBV如何达到这个目标,所以我回到Django中使用forms.py和FBV。但是我的表单模型中的字段有外键来引用其他模型。 我使用了forms.modelcooicefield,希望能够解决外键问题,但它不起作用,并显示了此错误 谢谢你的阅读,希望有人能帮我解决这个问

亲爱的, 我在Django遇到了一个问题。 “ModelChoiceField”对象没有属性“use\u required\u attribute”时出错,我不知道哪里出错

我的目标是让我的提交定制表单,但我不明白Django中的CBV如何达到这个目标,所以我回到Django中使用forms.py和FBV。但是我的表单模型中的字段有外键来引用其他模型。 我使用了
forms.modelcooicefield
,希望能够解决外键问题,但它不起作用,并显示了此错误

谢谢你的阅读,希望有人能帮我解决这个问题

这是我的代码:

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)
url.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')]
来自学生应用程序导入视图的

从django.url导入路径
应用程序名称='学生应用程序'
URL模式=[
路径(“”,views.StudentListView.as_view(),name='list'),
路径('/',views.StudentDetailView.as_view(),name='detail'),
路径('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>

{%csrf_令牌%}
{{form_cus.name.label}
{{form_cus.name}
{{form_cus.school.label}
{{form_cus.school}
{{form_cus}}
{%如果不是form.instance.pk%}
{%else%}
{%endif%}

谢谢大家!

A
modelcooicefield
不是一个小部件,它是一个表单字段,因此可以通过以下方式实现:

from django import forms
from .models import Case
from school_app.models import School
from student_app.models import Student

class CaseModelForm(forms.ModelForm):
    school = forms.ModelChoiceField(queryset=School.objects.all())
    name = forms.ModelChoiceField(queryset=Student.objects.all())

    class Meta:
        model = Case
        fields='__all__'
        widgets = {
            'phone' : forms.TextInput(),    
        }

哦非常感谢。现在可以使用了。
modelcooicefield
的默认小部件是
select
。这里的官方文档:@Stoobish:是的,但我们在这里处理表单字段,
ForeignKey
的默认表单字段是
modelcoocefield
。@WillemVanOnsem是的,只是供他参考。@EzraLin:您可以手动呈现表单:
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(),    
        }