首页 > 解决方案 > django.db.utils.IntegrityError:表“Event_event”中主键为“1”的行具有无效的外键:

问题描述

我的事件模型

class Event(models.Model):
    name = models.CharField(max_length=100)
    start_date = models.DateField()
    end_date = models.DateField()
    TIMEZONES = tuple(zip(pytz.all_timezones, pytz.all_timezones))
    timezone = models.CharField(max_length=32, choices=TIMEZONES)
    session=models.ForeignKey(Session,on_delete=models.CASCADE)
    slug = models.SlugField(unique=True, editable=False, max_length=100)

和我的会话模型

class Session(models.Model):
    name=models.CharField(max_length=100)
    start_date=models.DateField()
    end_date=models.DateField()
    speaker=models.CharField(max_length=100)
    slug = models.SlugField(unique=True, editable=False, max_length=100)

创建测试时出现错误。我应该在会话部分做什么?这是我的测试代码

class CreateTest(APITestCase):
    def test_create_event(self):
        url = 'http://127.0.0.1:8000/api/event/create'
        data = Event.objects.create(
            name="deneme 5",
            start_date="2020-05-23",
            end_date="2020-05-26",
            timezone="Etc/GMT",
            session_id='1'
            )
        response = self.client.post(url,data)
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)

标签: pythondjangodjango-rest-framework

解决方案


您收到此错误是因为您没有任何Sessionid 为 1 的记录。您必须在创建Session对象之前创建Event对象并将此创建的会话 id 提供给事件对象。在 DjangoAPITestCase中,始终为所有测试函数创建新的空数据库。


推荐阅读