我正在建立一个应用程序,经理们可以创建一个私人网页,他们需要添加人手动,以便他们访问该页。你知道吗
我不想让管理员看到所有的用户,所以我只想呈现列表中的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)
表单.py
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
上设置了fields
,因此让Django自动为您生成ModelForm
。表单使用ModelMultipleChoiceField
,它派生自ModelChoiceField
,如here所述。你知道吗如果您阅读了该部分的最后一段,您将看到这样一个字段的显示值来自模型的
__str__
方法,或者您可以用label_from_instance()
方法覆盖它。你知道吗因此,您需要在
ModelMultipleChoiceField
上重写此方法。但要做到这一点,您需要指定自己的表单。你知道吗所以:
Hotel
模型(HotelForm
)创建自己的模型表单。你知道吗ModelMultipleChoiceField
(ColleagueChoiceField
)的子类并重写label_from_instance()
方法以显示pk
。你知道吗HotelForm
上的colleagues
字段设置为ColleagueChoiceField
。你知道吗fields
属性,并将form_class
设置为HotelForm
。你知道吗相关问题 更多 >
编程相关推荐