добавить адрес доставки и адрес выставления счета на объекте оформления заказа

Речь идет о первом процессе оформления заказа. Здесь аргументом, который будет отправлен на сервер, будет электронная почта, строки, состоящие из количества и идентификатора варианта, адреса доставки и платежного адреса. У меня нет проблем с сохранением электронной почты и строк (количество и варианты), но для адреса доставки и адреса выставления счета есть несколько случаев.

  1. У гостя не будет адресной книги, поэтому он не сможет отправить уже созданный адрес. Они отправят совершенно новый адресный объект.
  2. Зарегистрированный пользователь может либо отправить уже созданный адрес, либо новый адрес (необходимо также проверить, существует ли он уже или нет).

Итак, теперь пользователь должен иметь возможность отправлять новый адрес, поэтому моя схема, необходимая серверу для создания объекта проверки, выглядит следующим образом

# these are the arguments needed to pass to server while creating checkout
input CheckoutCreateInput {
  lines: [CheckoutLineInput]!
  email: String
  shippingAddress: AddressInput
  billingAddress: AddressInput
}

input AddressInput {
    firstName: String
    lastName: String
    companyName: String
    streetAddress1: String
    streetAddress2: String
    city: String
    cityArea: String
    postalCode: String
    country: CountryCode
    countryArea: String
    phone: String
}

в таких случаях, как правильно обрабатывать адрес доставки и адрес выставления счета?

Вот как я пробовал

def resolve_checkout_create(obj, info, input):
    print('input', input)
    user = info.context.user
    checkout = Checkout()
    if (input['email']):
        try:
            user = User.objects.get(email=input['email'])
        except User.DoesNotExist:
            print('User does not exist')
            raise ValidationError({
                "email": ValidationError(
                f"looks like following {input['email']} does not exist",
                code=AccountErrorCode.EMAIL_DOES_NOT_EXIST
            )
            })
        checkout = Checkout(email=input['email'], user=user)
    print('checkout', checkout)
    if input['shipping_address'] is not None:
        checkout.shipping_address = input['shipping_address']
    if user.is_authenticated:
        checkout.shipping_address = user.default_shipping_address
    if input['billing_address'] is not None:
        checkout.billing_address = input['billing_address']
    if user.is_authenticated:
        checkout.billing_address = user.default_billing_address
    checkout.save()
    for line in input['lines']:
        checkout_line = CheckoutLine(quantity=line['quantity'], variant__id=line['variant_id'])
        checkout_line.save()
    checkout_line.checkout = checkout
    checkout_line.save()
    print('checkout_line', checkout_line)
    return {"created": True, checkout: checkout}

То, как я делаю, дает ошибку \"Checkout.shipping_address\" must be a \"Address\" instance.",.

0 ответов

Другие вопросы по тегам