Have some errors when I try to migrate to a database in django

Viewed 38

I try to migrate my Django models, but I get 4 Errors:

    auth.User.groups: (fields.E304) Reverse accessor 'Group.user_set' for 
    'auth.User.groups' 
    clashes with reverse accessor for 'products.Customer.groups'.
    HINT: Add or change a related_name argument to the definition for 'auth.User.groups' 
    or 'products.Customer.groups'.

    auth.User.user_permissions: (fields.E304) Reverse accessor 'Permission.user_set' for 
    'auth.User.user_permissions' clashes with reverse accessor for 
    'products.Customer.user_permissions'.

    HINT: Add or change a related_name argument to the definition for 
    'auth.User.user_permissions' or 'products.Customer.user_permissions'.


    products.Customer.groups: (fields.E304) Reverse accessor 'Group.user_set' for 
    'products.Customer.groups' clashes with reverse accessor for 'auth.User.groups'.
    HINT: Add or change a related_name argument to the definition for 
    'products.Customer.groups' or 'auth.User.groups'.


    products.Customer.user_permissions: (fields.E304) Reverse accessor 
   'Permission.user_set' for 'products.Customer.user_permissions' clashes with reverse 
     accessor for 'auth.User.user_permissions'.
    HINT: Add or change a related_name argument to the definition for 
    'products.Customer.user_permissions' or 'auth.User.user_permissions'.

I am not sure what it is about, because I have changed all related_names in Foreign_Keys. Maybe someone can help me out with this, please.

Thank you in advance :)

Here is my models.py file:

class Product(models.Model):
    
    product_id = models.UUIDField("A Product id", default=uuid.uuid4, editable=False)
    name = models.CharField(max_length=30, null=False, blank=False)
    description = models.CharField(max_length=500, null=True, default='')
    price = models.DecimalField('A price', null=False, blank=False, max_digits=4, decimal_places=2)
    image = models.ImageField(verbose_name='An image of the product', upload_to="img/")
    date_created = models.DateTimeField(auto_now_add=True)
    
    def get_absolute_url(self):
        return '/products/'

    def __repr__(self):
        return f'{self.id} {self.description} {self.price} '

    @staticmethod
    def get_products_by_id(ids):
        return Product.objects.filter(id__in=ids)

    @staticmethod
    def get_all_products():
        return Product.objects.all()

    @staticmethod
    def get_all_products_by_categoryid(category_id):
        if category_id:
            return Product.objects.filter(category=category_id)
        else:
            return Product.get_all_products()

    class Meta:
        verbose_name = 'Product'
        verbose_name_plural = 'Products'
        
        
class Category(models.Model):
    
    name = models.CharField(max_length=30, null=False, blank=False)
    category_id = models.UUIDField("A Category id", default=uuid.uuid4, editable=False)
    
    @staticmethod
    def get_all_categories():
        return Category.objects.all()

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = 'Category'
        verbose_name_plural = 'Categories'

class Customer(AbstractUser):

    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = ['email', 'password', 'last_name']
    
    profile = models.OneToOneField("Profile", related_name="user_profile",
                                   on_delete=models.CASCADE)
    first_name = models.CharField(max_length=50, null=False, blank=False)
    last_name = models.CharField(max_length=50, null=False, blank=False)
    username = models.CharField(max_length=30, default='')
    phone = models.CharField(max_length=10, null=True, blank=True, default='')
    email = models.EmailField(validators=[validators.EmailValidator()],
                              unique=True, null=False, blank=False)
    password = models.CharField(max_length=100, null=False, blank=False)
    date_created = models.DateTimeField(auto_now_add=True)

    @staticmethod
    def get_customer_by_email(email):
        try:
            return Customer.objects.get(email=email)
        except:
            return False

    def isExists(self):
        if Customer.objects.filter(email=self.email):
            return True

        return False

    class Meta:
        verbose_name = 'Customer'
        verbose_name_plural = 'Customers'

class Profile(models.Model):

    orders = models.ForeignKey('Order', related_name='cutomer_orders', 
    on_delete=models.CASCADE)
    first_name = models.CharField(max_length=50, null=False, blank=False)
    last_name = models.CharField(max_length=50, null=True, blank=True)
    phone = models.CharField(max_length=10, null=True, blank=True, default='')
    email = models.EmailField(validators=[validators.EmailValidator()])
    password = models.CharField(max_length=100, null=False, blank=False)
    user = models.OneToOneField(Customer, related_name='owner', null=True, blank=True, 
    on_delete=models.CASCADE)
    username = models.CharField(max_length=30, default='', validators= 
    [UnicodeUsernameValidator()])
    date_created = models.DateTimeField(auto_now_add=True)

    class Meta:
        verbose_name = 'Profile'
        verbose_name_plural = 'Profiles'

class Order(models.Model):

    order_id = models.UUIDField("An Order id", default=uuid.uuid4, editable=False)
    
    product = models.ForeignKey(Product, related_name='ordered_product', on_delete=models.CASCADE)
    customer = models.ForeignKey(Customer, related_name='orderer', on_delete=models.CASCADE)
    quantity = models.IntegerField(default=1)
    price = models.DecimalField(max_digits=4, decimal_places=2, null=False, blank=False)
    address = models.CharField(max_length=50, null=False, blank=False)
    phone = models.CharField(max_length=12, default='', null=True, blank=True)
    date_created = models.DateField(default=datetime.datetime.today)
    status = models.BooleanField(default=False)

    def placeOrder(self):
        self.save()

    @staticmethod
    def get_orders_by_customer(customer_id):
        return Order.objects.filter(customer=customer_id).order_by('-date')

    class Meta:
        verbose_name = 'Order'
        verbose_name_plural = 'Orders'
0 Answers
Related