我试图将一个字符串添加到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'
答案 0 :(得分:1)
问题
字段merchants
是一个列表,但默认情况下为空。
解决方案
因此,最好的做法是设置一个default=list
。
错误说明
数组值必须以“ {”或维度信息开头。
之所以会发生这种情况,是因为您在列表中放入了一个变量,而不是self.merchants = [merchant_id, ]
'NoneType'对象没有属性'append'
发生这种情况是因为您是“无”而不是列表。将无效列表设为默认值或通过代码进行设置:self.merchants = list()