列表索引必须为整数,不能是字符串,当将查询字符串分配给表单字段时。

2024-09-28 19:03:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我从视图中得到一个变量,然后像这样在函数中修改

class labelModelForm(forms.ModelForm):
    model = Labels_tool_
    fields = ['apn', 'owner_name', 'situs_addr_One', 'situs_addr_Two', 'mailing_addr_One', 'mailing_addr_Two']
    apn = forms.ModelChoiceField(queryset=Field.objects.values_list('name', flat=True), empty_label="(Choose field)")

    def __init__(self, *args, **kwargs):
  //getting layer_id from views
        layer_id = kwargs['layer_id']
        print         layer_id
        layer=Layer.objects.filter(id=int(str(layer_id))).first()
        x=Field.objects.filter(layer=layer)
         //On this step when modify queryset I get error
        self.fields['apn'].queryset= Field.objects.filter(layer=layer)

当我这样做时,我得到错误'列表索引必须是整数,而不是str'。那么如何修改查询集呢?Stacktrace of error

model.py
    class Labels_tool_(models.Model):
     map_id_labels = models.IntegerField(null=True, blank=False, max_length=255)
        apn = models.CharField(null=True, blank=False, max_length=255)
        owner_name = models.CharField(null=True, blank=False, max_length=255)
        situs_addr_One = models.CharField(null=True, blank=False, max_length=255)
        situs_addr_Two = models.CharField(null=True, blank=False, max_length=255)
        mailing_addr_One = models.CharField(null=True, blank=False, max_length=255)
        mailing_addr_Two = models.CharField(null=True, blank=False, max_length=255)
        layer_id_labels = models.IntegerField(null=True, max_length=255)

Model of Field
class Field(models.Model):
    TYPE_CHOICES = (
        ('date', 'Date'),
        ('datetime', 'Date + Time'),
        ('number', 'Decimal'),
        ('url', 'Hyperlink'),
        ('integer', 'Integer'),
        ('string', 'Text Line'),
        ('text', 'Text Block')
    )

    class Meta:
        db_table = 'fields'
        ordering = ['map_order']

    layer = models.ForeignKey(Layer)

    name = models.CharField(max_length=255)
    sql_name = models.CharField(max_length=255)

编辑:错误在self.fields['apn'].queryset= Field.objects.filter(layer=layer)。因为我有这样的字段fields = ['apn', 'owner_name', 'situs_addr_One', 'situs_addr_Two', 'mailing_addr_One', 'mailing_addr_Two']。这就是列表错误出现的原因。那我该怎么解决呢?你知道吗


Tags: namelayeridfalsetruemodelsonenull
1条回答
网友
1楼 · 发布于 2024-09-28 19:03:26

试着像这样改变你的姿势

class labelModelForm(forms.ModelForm):

    apn = forms.ModelChoiceField(queryset=Field.objects.values_list('name', flat=True), empty_label="(Choose field)")

    class Meta:
        model = Labels_tool_
        fields = ['apn', 'owner_name', 'situs_addr_One', 'situs_addr_Two', 'mailing_addr_One', 'mailing_addr_Two']

    def __init__(self, *args, **kwargs):
        super(labelModelForm, self).__init__(*args, **kwargs)
        layer_id = kwargs['layer_id']
        self.fields['apn'].queryset= Field.objects.filter(layer__id=int(layer_id)).values_list('name', flat=True)

相关问题 更多 >