动态填充的Django字段不显示选择

时间:2019-02-03 18:29:18

标签: python django

我想从存储过程中动态填充Django ChoiceField。但是,我无法将结果显示在Django管理员中。它变成空白。我想念什么?抱歉,我问的问题已经得到回答。我已经看过了……

class Plot(models.Model):
    plot_claim_type = models.CharField('Plot Claim Type', max_length=7)

class PlotAdminForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(PlotAdminForm, self).__init__(*args, **kwargs)
        c = connection.cursor()
        try:
            c.execute("BEGIN")
            c.callproc("udf_getcodetypes", "1")
            results = c.fetchall()
            for o in results:
                self.base_fields['plot_claim_type'].choices = forms.MultipleChoiceField(choices=(o[0], str(o[1])))
        finally:
            c.close()

@admin.register(Plot)

class PlotAdmin(admin.ModelAdmin):
    form = PlotAdminForm

1 个答案:

答案 0 :(得分:0)

您遍历结果的过程是分配和重新分配,因此您最终只完成一次分配(o中的最后一个results)。而且您无法为Field分配choices类型,这没有道理。

只需尝试一下(而不是for o in results循环):

results = c.fetchall()
self.fields['plot_claim_type'] = forms.MultipleChoiceField(choices=(
    (o[0], str(o[1])) for o in results))