2015-03-31 32 views
1

我在这里所示的multiplechoicefield每个页面加载选项列表: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保持不变,直到我重新启动服务器。每次我加载页面时如何更新选项。我是否需要在其他地方放置相同的代码?我需要很长时间才能到达这里,而且找不到任何有助于我的东西。谢谢!

回答

1

添加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是一个猜测,那本字典可能有不同的名称)

编辑:还有一两件事需要

改变超常班从:

class Meta: 
    model = RatesheetsComparison 
    fields = ('created', 'ratesheets',) 
    read_only_fields = ('created',) 

到:

class Meta: 
    model = RatesheetsComparison 
    fields = ('created',) 
    read_only_fields = ('created',) 

不然,因为它认为ratesheets存在,但无法找到它,你会得到一个ImportError。

+0

你很近......我只需要做更多的事情。如果有的话,你让我思考。我会在几分钟后让我回答我的答案。 – 2015-03-31 20:59:40

+0

没关系,你超级亲近,我只需要做更多的事情。 – 2015-03-31 21:14:25

+0

随意编辑我的问题,如果它是那么接近:) – 2015-03-31 21:16:13