multiplechoicefield - 如何在每次页面加载时更新选择列表
multiplechoicefield - how to update the list of choices on each page load
我在此处显示了一个多选字段:
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
字段不是作为 class 变量(它们是静态的!)而是在 __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 来自:
class Meta:
model = RatesheetsComparison
fields = ('created', 'ratesheets',)
read_only_fields = ('created',)
至:
class Meta:
model = RatesheetsComparison
fields = ('created',)
read_only_fields = ('created',)
否则您将收到 ImportError,因为它认为费率表存在但找不到它。
我在此处显示了一个多选字段:
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
字段不是作为 class 变量(它们是静态的!)而是在 __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 来自:
class Meta:
model = RatesheetsComparison
fields = ('created', 'ratesheets',)
read_only_fields = ('created',)
至:
class Meta:
model = RatesheetsComparison
fields = ('created',)
read_only_fields = ('created',)
否则您将收到 ImportError,因为它认为费率表存在但找不到它。