Как соединить 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()
Вернуться на верх