Python 具有PK而不是用户名的choicefield的ModelForm

Python 具有PK而不是用户名的choicefield的ModelForm,python,django,django-forms,django-class-based-views,Python,Django,Django Forms,Django Class Based Views,我有一个由PostView生成的表单 class HotelCreateView(LoginRequiredMixin, CreateView): model = Hotel fields = ['hotel', 'code', 'collaborateurs', 'planning' 'payday'] def form_valid(self, form): form.instance.manager_hotel = self.request.user

我有一个由PostView生成的表单

class HotelCreateView(LoginRequiredMixin, CreateView):
    model = Hotel
    fields = ['hotel', 'code', 'collaborateurs', 'planning' 'payday']

    def form_valid(self, form):
        form.instance.manager_hotel = self.request.user
        return super().form_valid(form)
模型collabours是一个显示用户名的选择字段

我希望这个字段改为呈现PK,所以我尝试创建自己的表单,但无法理解

forms.py

 from django import forms 
 from .models import Hotel

class HotelForm(forms.Form):
   collaborateurs = forms.ModelChoiceField(queryset=collaborateurs.objects.all())

谢谢

我建议您创建一个自定义小部件

在一些“模板”文件夹中创建一个“widgets”文件夹和“pk select.html”

widgets/pk-select.html

<select name="{{ widget.name }}"{% include "django/forms/widgets/attrs.html" %}>
  {% for group_name, group_choices, group_index in widget.optgroups %}
    {% if group_name %}
      <optgroup label="{{ group_name }}">
    {% endif %}
    {% for option in group_choices %}
      <option value="{{ option.value|stringformat:'s' }}"{% include "django/forms/widgets/attrs.html" %}>{{ option.value }}</option>
    {% endfor %}
    {% if group_name %}
      </optgroup>
    {% endif %}
  {% endfor %}
</select>

<option value="{{ option.value|stringformat:'s' }}"{% include "django/forms/widgets/attrs.html" %}>{{ option.value }}</option>

接下来,我希望您对“view.py”进行一些更改

view.py

class HotelCreateView(LoginRequiredMixin, CreateView):
    form_class = HotelCreateForm
    template_name = 'hotel_form.html'

    def form_valid(self, form):
        form.instance.manager_hotel = self.request.user
        return super().form_valid(form)

“pk select.html”中的这一行是哪一部分进行了更改

{{option.value}
最初,
{{option.value}}
{{widget.label}}
,您可以在GitHub页面上看到

{{widget.label}
在本例中显示用户名,因此我修改了此部分


我希望这就是您要找的,请随时询问我的理解是否有误。

您是指表单。ChoiceField不是表单。CollegEchoiceField?是的,我错了。但是,即使这样,我的表单也没有改变。我尝试了它,但不适用于我的案例:
class HotelCreateView(LoginRequiredMixin,CreateView):model=Hotel fields=['Hotel','code','collabours','planning','payday']def form\u valid(self,form):form.instance.manager_hotel=self.request.user return super().form_valid(form)hotel=form.cleanned_data['collabours'].id
<option value="{{ option.value|stringformat:'s' }}"{% include "django/forms/widgets/attrs.html" %}>{{ option.value }}</option>