Python DETAIL: значение массива должно начинаться с "{" или информации о размерах - PullRequest
2 голосов
/ 11 июля 2019

я пытаюсь добавить строку в ArrayField, и я получаю DETAIL: Array value must start with "{" or dimension information. ошибку.

вот как модель выглядит как метод update_credential, где я пытаюсь добавить merchant_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'])

Я также пытался добавить merchant_id к продавцам self.merchants.append(merchant_id) и получил эту ошибку AttributeError: 'NoneType' object has no attribute 'append'

1 Ответ

1 голос
/ 12 июля 2019

Проблема
Поле merchants является списком, но по умолчанию оно равно нулю.

Решение
Так что лучше всего сделатьустанавливается default=list.

Объяснение ошибки

Значение массива должно начинаться с "{" или информации о размерах.

Это происходит потому, что вы помещаете переменную в список, вместо этого сделайте это self.merchants = [merchant_id, ]

У объекта 'NoneType' нет атрибута 'append'

Это происходит потому, что вы - None, а не список.Сделать список недействительным значением по умолчанию или установить его с помощью кода: self.merchants = list()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...