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/ за более подробной информацией