Python详细信息:数组值必须以“ {”或维度信息开头

时间:2019-07-11 17:07:11

标签: python django django-models django-rest-framework

我试图将一个字符串添加到ArrayField中,但出现DETAIL: Array value must start with "{" or dimension information.错误。

这就是模型的外观,方法update_credential就是我试图将商人ID添加到商人ArrayField的地方。

class CloverCredential(models.Model):
    tenant = models.OneToOneField('tenant.Tenant', unique=True, on_delete=models.CASCADE)
    token = EncryptedCharField(max_length=255, null=True)
    spreedly_receiver_token = EncryptedCharField(max_length=255, null=True)
    merchants = ArrayField(models.CharField(max_length=200, blank=True), null=True)

    def update_credential(self, new_token, merchant_id):
        self.token = new_token
        self.merchants = merchant_id
        self.save()

这是我调用update_credential并传递令牌和merchant_id

的视图
class OAuthCallback(APIView):
    def api_request(self, path):
        return requests.get(path).json()

    def get(self, request, *args, **kwargs):
        code = request.GET.get('code', '')
        state = unsign_state(request.GET.get('state', ''))
        merchant_id = request.GET.get('merchant_id', '')
        tenant = get_object_or_404(Tenant, pk=state['tenant_id'])
        clover_credential, created = CloverCredential.objects.get_or_create(tenant=tenant)

        url = f'{settings.CLOVER_URL_US}/oauth/token?client_id={settings.CLOVER_APP_ID}&client_secret={settings.CLOVER_APP_SECRET}&code={code}'
        oauth_response = self.api_request(url)
        clover_credential.update_credential(oauth_response['access_token'], merchant_id)
        return redirect(state['redirect'])

我还尝试将商人ID附加到商人 self.merchants.append(merchant_id) 并得到这个错误 AttributeError: 'NoneType' object has no attribute 'append'

1 个答案:

答案 0 :(得分:1)

问题
字段merchants是一个列表,但默认情况下为空。

解决方案
因此,最好的做法是设置一个default=list

错误说明

  

数组值必须以“ {”或维度信息开头。

之所以会发生这种情况,是因为您在列表中放入了一个变量,而不是self.merchants = [merchant_id, ]

  

'NoneType'对象没有属性'append'

发生这种情况是因为您是“无”而不是列表。将无效列表设为默认值或通过代码进行设置:self.merchants = list()