Django - UNIQUE约束在外键上失败
Django - UNIQUE约束在外键上失败
我在我的Django数据库(SQLite)上有两个表,Field_Of_Research和Conference。Conference有三个外键与Field_Of_Research的主键关联。在迁移命令期间,我通过读取csv文件来填充数据库,但是当插入具有相同外键值(对于所有三个键)的两个conference时,会显示UNIQUE constraint failed错误。如果我使用管理员页面插入会议,数据库会出现相同的错误。我该如何解决这个问题?\nmodel.py\n
class Field_Of_Research(models.Model): for_id = models.PositiveIntegerField(primary_key=True) name = models.CharField(max_length=256) def __str__(self): return self.name class Conference(models.Model): conf_id = models.PositiveIntegerField(primary_key=True) title = models.CharField(max_length=256) primary_for = models.ForeignKey(to=Field_Of_Research, default=0, on_delete=models.SET_DEFAULT, related_name='primary_for') secondary_for = models.ForeignKey(to=Field_Of_Research, default=0, on_delete=models.SET_DEFAULT, related_name='secondary_for') third_for = models.ForeignKey(to=Field_Of_Research, default=0, on_delete=models.SET_DEFAULT, related_name='third_for') def __str__(self): return self.title
\npopulate.py\n
with open('./server/api/database/files/fields_of_research.csv') as csv_file: csv_reader = csv.reader(csv_file, delimiter=';') for row in csv_reader: f = Field_Of_Research.objects.get_or_create( for_id=row[0], name=row[1] ) print('Fields of Research done.') #填充conferences数据库 with open('./server/api/database/files/conferences.csv') as csv_file: csv_reader = csv.reader(csv_file, delimiter=';') for row in csv_reader: print(row) c = Conference.objects.get_or_create( conf_id=row[0], title=row[1], primary_for=Field_Of_Research.objects.get(for_id=int(row[3])), secondary_for=Field_Of_Research.objects.get(for_id=int(row[4])), third_for=Field_Of_Research.objects.get(for_id=int(row[5])), ) print('Conferences done.')
\n错误信息\n
File "C:\Users\andre\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\db\backends\utils.py", line 86, in _execute return self.cursor.execute(sql, params) File "C:\Users\andre\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\db\backends\sqlite3\base.py", line 396, in execute return Database.Cursor.execute(self, query, params) sqlite3.IntegrityError: UNIQUE constraint failed: api_conference.third_for_id