我在这里显示了一个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/

10-12 21:17