Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在CreateView中呈现PK而不是用户名_Python_Django_Django Views_Django Class Based Views - Fatal编程技术网

Python 在CreateView中呈现PK而不是用户名

Python 在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

我正在构建一个应用程序,经理可以在其中创建一个私人网页,他们需要手动添加人员,以便访问该页面

我不想让管理员看到所有的用户,所以我只想呈现列表中的PK

我的观点。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))
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


列表视图在哪里?您的要求不正确clear@AnjaneyuluBatta什么不清楚?JPG我不想对ListView进行任何更改,我只想让HotelCreateView中的表单呈现PK,而不是您需要提供更多信息的choice字段中的用户名。什么选择领域?什么用户名?是否用于
同事
字段?请出示酒店模型。@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类的示例正是您要查找的。