我想从存储过程中动态填充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
答案 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))