想要从 ModelForm 中排除一些数据
Want to exclude some data from ModelForm
我尝试使带有 objectl 的表单仅链接到当前基础对象(从他们的模型中排除其他对象):
forms.py
class RoomTypeForm(ModelForm):
class Meta:
model = RoomType
fields = {'Name', 'Rooms', 'Beds', 'Facilities', 'Capacity'}
exclude = ('Building',)
def __init__(self, *args, **kwargs):
self.building_id = kwargs.pop('building_id')
self.fields['Capacity'].queryset = Capacity.objects.filter(
Building=self.building_id
)
views.py
def building_details(request, hotel_id, building_id):
capacity_form = CapacityForm
roomtype_form = RoomTypeForm
args = {}
args.update(csrf(request))
args['building'] = Building.objects.get(id=building_id)
args['capacity'] = Capacity.objects.filter(Building=building_id)
args['roomtypes'] = RoomType.objects.filter(Building=building_id)
args['capform'] = capacity_form
args['rtform'] = roomtype_form(building_id=building_id)
return render_to_response('building.html', args)
但是我有错误:
'RoomTypeForm' object has no attribute 'fields'
行内:
self.fields['Capacity'].queryset =
Capacity.objects.filter(Building=self.building_id)
如何才能使所有这些都起作用?请帮忙。
您需要在__init__
中调用super()
class
def __init__(self, *args, **kwargs):
self.building_id = kwargs.pop('building_id')
super(RoomTypeForm, self).__init__(*args, **kwargs)
self.fields['Capacity'].queryset = Capacity.objects.filter(Building=self.building_id)
或者如果您使用的是 python3,您可以这样做:
super().__init__(*args, **kwargs)
另一方面,在 fields
中指定列表或元组是标准做法。您指定了一个集合。
我尝试使带有 objectl 的表单仅链接到当前基础对象(从他们的模型中排除其他对象):
forms.py
class RoomTypeForm(ModelForm):
class Meta:
model = RoomType
fields = {'Name', 'Rooms', 'Beds', 'Facilities', 'Capacity'}
exclude = ('Building',)
def __init__(self, *args, **kwargs):
self.building_id = kwargs.pop('building_id')
self.fields['Capacity'].queryset = Capacity.objects.filter(
Building=self.building_id
)
views.py
def building_details(request, hotel_id, building_id):
capacity_form = CapacityForm
roomtype_form = RoomTypeForm
args = {}
args.update(csrf(request))
args['building'] = Building.objects.get(id=building_id)
args['capacity'] = Capacity.objects.filter(Building=building_id)
args['roomtypes'] = RoomType.objects.filter(Building=building_id)
args['capform'] = capacity_form
args['rtform'] = roomtype_form(building_id=building_id)
return render_to_response('building.html', args)
但是我有错误:
'RoomTypeForm' object has no attribute 'fields'
行内:
self.fields['Capacity'].queryset = Capacity.objects.filter(Building=self.building_id)
如何才能使所有这些都起作用?请帮忙。
您需要在__init__
super()
class
def __init__(self, *args, **kwargs):
self.building_id = kwargs.pop('building_id')
super(RoomTypeForm, self).__init__(*args, **kwargs)
self.fields['Capacity'].queryset = Capacity.objects.filter(Building=self.building_id)
或者如果您使用的是 python3,您可以这样做:
super().__init__(*args, **kwargs)
另一方面,在 fields
中指定列表或元组是标准做法。您指定了一个集合。