добавить адрес доставки и адрес выставления счета на объекте оформления заказа
Речь идет о первом процессе оформления заказа. Здесь аргументом, который будет отправлен на сервер, будет электронная почта, строки, состоящие из количества и идентификатора варианта, адреса доставки и платежного адреса. У меня нет проблем с сохранением электронной почты и строк (количество и варианты), но для адреса доставки и адреса выставления счета есть несколько случаев.
- У гостя не будет адресной книги, поэтому он не сможет отправить уже созданный адрес. Они отправят совершенно новый адресный объект.
- Зарегистрированный пользователь может либо отправить уже созданный адрес, либо новый адрес (необходимо также проверить, существует ли он уже или нет).
Итак, теперь пользователь должен иметь возможность отправлять новый адрес, поэтому моя схема, необходимая серверу для создания объекта проверки, выглядит следующим образом
# 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.",
.