想从ModelForm中排除一些数据吗

2024-04-19 03:17:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试将objectl链接到当前基本对象的窗体(将其他对象从其模型中排除):

表单.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
                                           )

视图.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)

怎么可能使所有这些都能起作用呢?请帮忙。你知道吗


Tags: 对象pyselfformidfieldsobjectsargs
1条回答
网友
1楼 · 发布于 2024-04-19 03:17:58

您需要调用__init__中的super()

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中指定列表或元组是标准实践。您指定了一个集合。你知道吗

相关问题 更多 >