RelatedObjectDoesNotExist в /profile/ У пользователя нет клиента

Я создал модель пользователя Customer. Я мигрировал модель для синхронизации с базой данных. Однако я получаю ошибку User has no customer. Но после добавления кода профиля для каждого пользователя я получаю следующую ошибку

Вот мой код

from django.db import models
from django.contrib.auth.models import User


# Create your models here.



class Customer(models.Model):
    user = models.OneToOneField(User, null=True, on_delete=models.CASCADE)
    full_name = models.CharField(max_length=200, null=True)
    address = models.CharField(max_length=100, null=True, blank=True)

  


    def __str__(self):
        return self.full_name




class  CustomerProfileView(TemplateView):
      template_name = "app/CustomerProfile.html"


     

      def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        customer = self.request.user.customer
        context['customer'] = customer
        orders = Order.objects.filter(cart__customer=customer).order_by("-id")
        context["orders"] = orders
        return context

Как говорит ошибка, вы используете объект User, для которого не существует связанного объекта Customer.

Таким образом, вам необходимо создать Customer запись для всех пользователей, у которых нет Customer. Вы можете, например, сделать это в миграции данных [Django-doc] с помощью:

python manage.py makemigrations --empty app_name

при миграции данных вы можете создать Customer для каждого пользователя без а Customer:

from django.db import migrations

def create_customers(apps, schema_editor):
    Customer = apps.get_model('app_name', 'Customer')
    User = apps.get_model('auth', 'User')
    customers = [
        Customer(user=user, full_name=None, address=None)
        for user in User.objects.filter(customer=None)
    ]
    Customer.objects.bulk_create(customers)

class Migration(migrations.Migration):

    dependencies = [
        ('app_name', '1234_some_migration'),
    ]

    operations = [
        migrations.RunPython(create_customers),
    ]

и затем запустить миграцию для создания клиента для всех уже существующих пользователей.

Вернуться на верх