Reputation: 1
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