Sierra
Sierra

Reputation: 1

Integrity Error while Running Test in Django Framework

While running test on my Django E-bookstore Project, I encountered this error related to test_models.py file.

django.db.utils.IntegrityError: The row in table 'store_product' with primary key '1' has an invalid foreign key: store_product.category_id contains a value '4' that does not have a corresponding value in store_category.id

Ran 8 tests in 0.097s, FAILED (errors=1), Destroying test database for alias 'default'...

Test_models.py file

from django.contrib.auth.models import User
from django.test import TestCase

from store.models import Category, Product


class TestCategoriesModel(TestCase):
    
    def setUp(self):
        
        self.data1= Category.objects.create(name='History',slug='history')
        
    
    def test_category_model_entry(self):
        
        data = self.data1
        self.assertTrue(isinstance(data, Category))
        
    def test_category_model_entry(self):
        
        data = self.data1
        self.assertEqual(str(data), 'History')
        
        
        
class TestProductModel(TestCase):
    
    def setUp(self):
        
        self.data1= Category.objects.create(name='History',slug='history')
        User.objects.create(username ='admin')
        self.data1 = Product.objects.create(category_id =4, created_by_id = 1, price = '30.00', title='Circular History',
                                            slug = 'Circular-history', image = 'Circular_History')
    
    
    def test_product_model_entry(self):
        data = self.data1
        self.assertTrue(isinstance(data, Product))
        
    def test_product_model_entry(self):
        data = self.data1
        self.assertEqual(str(data), 'Circular History')

Models.py file

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


# Create your models here.
class Category(models.Model):
    name = models.CharField(max_length=100, db_index=True)
    slug = models.SlugField(max_length=100, unique=True)
    
    class meta:
        verbose_name_plural = 'categories'
        
        
    def get_absolute_url(self):
        return reverse('store:category_list', args=[self.slug])
        
    def __str__(self):
        return self.name
    
class Product(models.Model):
    category = models.ForeignKey(Category, related_name='product' , on_delete= models.CASCADE)
    created_by= models.ForeignKey(User, on_delete=models.CASCADE, related_name='product_creator' )
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=100, default='admin')
    description = models.TextField(blank=True)
    image = models.ImageField(upload_to='images/')
    slug = models.SlugField(max_length=100)
    price = models.DecimalField(max_digits=6, decimal_places=2)
    in_stock = models.BooleanField(default=True)
    is_active = models.BooleanField(default=True)
    created = models.DateTimeField(auto_now_add=True)
    update = models.DateTimeField(auto_now=True)
    
    
    class meta:
        verbose_name_plural = 'products'
        ordering = ('-created',)
        
    def get_absolute_url(self):
        return reverse('store:product_detail', args=[self.slug])
    
    
    def __str__(self):
        return self.title

store_category in db.sqlite3

SQL 

        1 / 1        1 - 6 of 6

id  name        slug
4   History     history
5   Religion    religion
6   Geography   geography
8   Politics    politics
11  Education   education
12  Fiction     fiction

store_product in db.sqlite3

id        title                 slug               category_id      created_by_id
4    Imran Khan Pakistan    Imran-Khan-Pakistan       4                1
5    Circular History       Circular-History          4                1

I got no issues in migrating models into database n my site is running fine but while running test, it is throwing error.

Upvotes: 0

Views: 22

Answers (0)

Related Questions