Python 在CreateView中呈现PK而不是用户名
我正在构建一个应用程序,经理可以在其中创建一个私人网页,他们需要手动添加人员,以便访问该页面 我不想让管理员看到所有的用户,所以我只想呈现列表中的PK 我的观点。pyPython 在CreateView中呈现PK而不是用户名,python,django,django-views,django-class-based-views,Python,Django,Django Views,Django Class Based Views,我正在构建一个应用程序,经理可以在其中创建一个私人网页,他们需要手动添加人员,以便访问该页面 我不想让管理员看到所有的用户,所以我只想呈现列表中的PK 我的观点。py class HotelCreateView(LoginRequiredMixin, CreateView): model = Hotel form_class = HotelForm def form_valid(self, form): form.instance.manager_hotel = self.reques
class HotelCreateView(LoginRequiredMixin, CreateView):
model = Hotel
form_class = HotelForm
def form_valid(self, form):
form.instance.manager_hotel = self.request.user
return super().form_valid(form)
from django.db import models
from django.forms import ModelForm
from .models import Hotel
class ColleagueChoiceField(ModelChoiceField):
def label_from_instance(self, obj):
return obj.get_pk()
class HotelForm(models.Model):
ColleagueModelChoiceField(queryset=Colleague.objects.filter(pk))
forms.py
class HotelCreateView(LoginRequiredMixin, CreateView):
model = Hotel
form_class = HotelForm
def form_valid(self, form):
form.instance.manager_hotel = self.request.user
return super().form_valid(form)
from django.db import models
from django.forms import ModelForm
from .models import Hotel
class ColleagueChoiceField(ModelChoiceField):
def label_from_instance(self, obj):
return obj.get_pk()
class HotelForm(models.Model):
ColleagueModelChoiceField(queryset=Colleague.objects.filter(pk))
您正在
CreateView
上设置字段
,因此让Django自动为您生成ModelForm
。该表单使用了一个modelmultipechoicefield
,该字段源自所述的modelcooicefield
如果您阅读该部分的最后一段,您将看到此类字段的显示值来自模型的\uuu str\uuu
方法,或者您可以使用label\u from\u instance()
方法覆盖此值
因此,您需要在modelmultipechoicefield
上重写此方法。但要做到这一点,您需要指定自己的表单
因此:
- 为您的
模型创建您自己的模型表单(酒店
)酒店表单
- 创建
(modelmultipechoicefield
)的子类,并重写collaguechoicefield
方法以显示label\u from\u instance()
pk
- 将
上的HotelForm
字段设置为同事
字段同事
- 删除视图中的
属性,并将字段
设置为您的表单类
HotelForm
CreateView
上设置字段
,因此您让Django自动为您生成模型表单
。该表单使用了一个modelmultipechoicefield
,该字段源自所述的modelcooicefield
如果您阅读该部分的最后一段,您将看到此类字段的显示值来自模型的\uuu str\uuu
方法,或者您可以使用label\u from\u instance()
方法覆盖此值
因此,您需要在modelmultipechoicefield
上重写此方法。但要做到这一点,您需要指定自己的表单
因此:
- 为您的
模型创建您自己的模型表单(酒店
)酒店表单
- 创建
(modelmultipechoicefield
)的子类,并重写collaguechoicefield
方法以显示label\u from\u instance()
pk
- 将
上的HotelForm
字段设置为同事
字段同事
- 删除视图中的
属性,并将字段
设置为您的表单类
HotelForm
同事字段?请出示酒店模型。@DanielRoseman我编辑过。选择字段是一个ManyToManyField,它使用来自django.contrib.auth.models的用户。是的,适用于同事字段列表视图在哪里?您的要求不是clear@AnjaneyuluBatta什么不清楚?JPG我不想对ListView进行任何更改,我只想让HotelCreateView中的表单呈现PK,而不是您需要提供更多信息的choice字段中的用户名。什么选择领域?什么用户名?是否用于同事字段?请出示酒店模型。@DanielRoseman我编辑过。选择字段是一个ManyToManyField,它使用来自django.contrib.auth.models的用户。是的,这是针对同事字段的,很抱歉,但我无法理解,我尝试了:forms.py:from django import forms class HotelForm(forms.Form):collabours=forms.ColleagueChoiceField(label_from_instance('pk'))好吗?您应该创建一个模型表单,而不仅仅是一个表单,请阅读。不,label\u from\u instance()
是modelmultipechoicefield
上的一个方法,因此您需要首先对其进行子类化,如我所说,并重写该方法。您需要执行我提到的所有4个步骤。@DirkGroot,请参阅我的自定义代码。我从未使用过modelForm,因此可能存在很大的错误。您没有阅读我建议的有关modelForm的链接,否则您将知道必须指定model
和字段。特别是关于如何定制字段。更改field\u类的示例正是您所要查找的。很抱歉,我无法找到它。我尝试了:forms.py:from django import forms class HotelForm(forms.Form):collabours=forms.ColleagueChoiceField(label\u from\u instance('pk'))它好吗?您应该创建一个ModelForm而不仅仅是一个表单,请阅读。不,label\u from\u instance()
是modelmultipechoicefield
上的一个方法,因此您需要首先对其进行子类化,如我所说,并重写该方法。您需要执行我提到的所有4个步骤。@DirkGroot,请参阅我的自定义代码。我从未使用过modelForm,因此可能存在很大的错误。您没有阅读我建议的有关modelForm的链接,否则您将知道必须指定model
和字段。特别是关于如何定制字段。给出的更改字段\u类的示例正是您要查找的。