python - 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)
解决方案
您收到此错误是因为您没有任何Session
id 为 1 的记录。您必须在创建Session
对象之前创建Event
对象并将此创建的会话 id 提供给事件对象。在 DjangoAPITestCase
中,始终为所有测试函数创建新的空数据库。
推荐阅读
- ios - 在 Firebase 中删除/删除数组索引
- azure - 无法使用 terraform 在 blob 容器内创建文件夹
- javascript - 有没有办法在单个文本图层中获取所有颜色?
- mysql - MySQL逆向工程师没有显示关系
- python - Conv1D网络的输入维度问题
- java - 在hashmap源代码中调试时key和value的奇怪值
- azure - 使用客户端密码而不是用户凭据通过 MSAL.Net 获取令牌
- javascript - 搜索不起作用时输入功能
- kubernetes - 就绪探测失败:获取 http://10.244.0.3:8181/ready:拨打 tcp 10.244.0.3:8181:连接:连接被拒绝
- java - Java GuardedString - 用于加密的随机密钥是否存储在 Java 堆内存中?如果不是,那么密钥保存在哪里?