TypeError: Поле 'id' ожидало число, но получило (<Группа: клиент>, True) DJANGO ERROR

Я учусь использовать Django через небольшой проект... Я пытаюсь подключить свой проект к базе данных Postgreslq и получаю ошибку такого типа

models.py

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

class Customer(models.Model):
    user = models.OneToOneField(User, null=True, blank=True, on_delete=models.CASCADE)
    name = models.CharField(max_length=200, null=True)
    phone = models.CharField(max_length=200, null=True)
    email = models.CharField(max_length=200, null=True)
    profile_pic = models.ImageField(default='profile1.png',null=True, blank=True)
    date_created = models.DateTimeField(auto_now_add=True, null=True)
    
    def __str__(self):
        return self.name

class Tag(models.Model):
    name = models.CharField(max_length=200, null=True)
    
    def __str__(self):
        return self.name 

class Product(models.Model):
    CATEGORY = (
            ('Indoor', 'Indoor'),
            ('Out Door', 'Out Door'),
            ) 
    
    name = models.CharField(max_length=200, null=True)
    prince = models.FloatField(null=True)
    category = models.CharField(max_length=200, null=True, choices=CATEGORY)
    description = models.CharField(max_length=200, null=True, blank=True)
    date_created = models.DateTimeField(auto_now_add=True, null=True)
    tags = models.ManyToManyField(Tag)

    def __str__(self):
        return self.name

class Order(models.Model):
    STATUS = (
            ('Pending', 'Pending'),
            ('Out for delivery', 'Out for delivery'),
            ('Delivered', 'Delivered'),
            )
    
    customer = models.ForeignKey(Customer, null=True, on_delete=SET_NULL)
    product = models.ForeignKey(Product, null=True, on_delete=SET_NULL)
    status = models.CharField(max_length=200, null=True, choices=STATUS)
    date_created = models.DateTimeField(auto_now_add=True, null=True)
    note = models.CharField(max_length=1000, null=True)

    def __str__(self):
        return self.product.name

signals.py

from django.db.models.signals import post_save
from django.contrib.auth.models import User, Group
from .models import Customer

def customer_profile(sender, instance, created, **kwagrs):
    if created:
        group = Group.objects.get_or_create(name='customer')
        instance.groups.add(group)
        Customer.objects.create(
                user = instance,
                name = instance.username
            )
        print('Profile created.!')

post_save.connect(customer_profile, sender= User)

settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'DEMO_TEST',
        'USER' : 'postgres',
        'HOST': 'localhost',
        'PASSWORD':'Elohim150..',
        'PORT': '5432',
    }
}

Traceback

Возможно, есть ошибка в одном из полей, которые у меня есть в модели 'Customer', но я действительно не понимаю на сто процентов, что это за ошибка, потому что я неопытен ... Может ли кто-нибудь показать мне ошибку и объяснить мне решение, это было бы очень полезно. !!

get или create в django возвращают кортеж. (object, created)

https://docs.djangoproject.com/en/4.0/ref/models/querysets/#get-or-create

get_or_create(defaults=None, **kwargs)¶ Удобный метод для поиска объекта с заданными kwargs (может быть пустым, если ваша модель имеет значения по умолчанию для всех полей) и его создания при необходимости. Возвращает кортеж (object, created), где object - полученный или созданный объект, а created - булево значение, указывающее, был ли создан новый объект.

.

попробуйте это

def customer_profile(sender, instance, created, **kwagrs):
    if created:
        group, is_created = Group.objects.get_or_create(name='customer')
        if is_created:
            instance.groups.add(Group.objects.get(name='customer'))
        else:
            instance.groups.add(group)
        Customer.objects.create(
                user = instance,
                name = instance.username
            )
        print('Profile created.!')

Обратитесь к https://docs.djangoproject.com/en/3.2/topics/db/examples/many_to_many/ за более подробной информацией

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