Как соединить 2 модели в админке, если они уже соединены OnetoOne?
models.py
from django.contrib.auth.models import User
class Customer(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, null=True, blank=True)
Каждый раз для нового пользователя (когда он регистрируется) я должен выбрать пользователя в админке ("в модели клиента" (см. скриншот https://prnt.sc/waTmROxj3-xn), если я не выбираю нового пользователя, у меня возникает ошибка RelatedObjectDoesNotExist
при / User has no customer. Как сделать это автоматически? Что я сделал не так?
Поймать это исключение можно, но тогда какие данные нужно добавить в клиент, чтобы его подключить? Не поменяет же пользователь флаг на свой (https://prnt.sc/waTmROxj3-xn(скриншот)):
views.py
def cartData(request):
if request.user.is_authenticated:
try:
customer = request.user.customer
except ObjectDoesNotExist:
customer = ?
order, created = Order.objects.get_or_create(customer=customer, complete=False)
items = order.orderitem_set.all()
cartItems = order.get_cart_items
else:
cookieData = cookieCart(request)
cartItems = cookieData['cartItems']
order = cookieData['order']
items = cookieData['items']
return {'cartItems': cartItems, 'order': order, 'items': items}
Если вы хотите расширить модель пользователя - вы можете: Вы можете расширить модель пользователя по умолчанию или заменить ее полностью индивидуальной.
Создать дочернюю модель от пользователя:
from django.contrib.auth.models import User
class Customer(User):
# you dont need user field any more
Создайте своего пользователя:
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
# you dont need the customer any more
https://docs.djangoproject.com/en/4.1/topics/auth/customizing/
После 1 или 2 вам не нужно создавать дополнительный объект пользователя, это должно произойти автоматически.
в вашем коде с вашими моделями:
if request.user.is_authenticated:
try:
customer = request.user.customer
except ObjectDoesNotExist:
customer = Customer(user=request.user)
customer.save()