我在这里显示了一个multiplechoicefield:
ratesheets = serializers.MultipleChoiceField(choices=RATESHEET_CHOICES, allow_blank=False)
并在此处填充RATESHEET_CHOICES(也在上下文中显示了以上内容):
class RatesheetsComparisonSerializer(serializers.HyperlinkedModelSerializer):
RATESHEET_CHOICES = []
def __init__(self, *args, **kwargs):
for rs in RateSheet.objects.all():
self.RATESHEET_CHOICES.append((rs.pk, rs.title))
super(RatesheetsComparisonSerializer, self).__init__(*args, **kwargs)
...
ratesheets = serializers.MultipleChoiceField(choices=RATESHEET_CHOICES, allow_blank=False)
我唯一的问题是,在我重新启动服务器之前,MultipleChoiceField保持不变。每次加载页面时如何更新选择。我是否需要将相同的代码放在其他地方?我花了很长时间才到达这里,而对于这种东西似乎找不到任何帮助,我找不到任何东西。谢谢!
最佳答案
将ratesheets
字段不是作为类变量(是静态变量)添加,而是在__init__
方法中添加:
class RatesheetsComparisonSerializer(serializers.HyperlinkedModelSerializer):
def __init__(self, *args, **kwargs):
super(RatesheetsComparisonSerializer, self).__init__(*args, **kwargs)
RATESHIELD_CHOICES = []
for rs in RateSheet.objects.all():
RATESHEET_CHOICES.append((rs.pk, rs.title))
self.fields['ratesheets'] = serializers.MultipleChoiceField(choices=RATESHEET_CHOICES, allow_blank=False)
(我假设这些序列化器的工作方式类似于Django形式,
self.fields
是一个猜测,并且字典的名称可能有所不同)编辑:还需要一件事
将Meta类从:
class Meta:
model = RatesheetsComparison
fields = ('created', 'ratesheets',)
read_only_fields = ('created',)
至:
class Meta:
model = RatesheetsComparison
fields = ('created',)
read_only_fields = ('created',)
否则,您会收到ImportError,因为它认为价目表存在但找不到。
关于python - multiplechoicefield-如何在每次加载页面时更新选择列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29378209/