Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django-foreing键上的唯一约束失败_Python_Django_Django Models - Fatal编程技术网

Python Django-foreing键上的唯一约束失败

Python Django-foreing键上的唯一约束失败,python,django,django-models,Python,Django,Django Models,我的Django数据库(SQLite)上有两个表,一个是研究和会议领域。会议有三个外键与研究领域的主键相关。在migrate命令期间,我填充数据库(从csv文件读取),但是当插入两个具有相同外键值(对于所有三个键)的会议时,将显示唯一约束failed。 如果我使用admin页面插入Conferences,数据库会给出相同的错误。 我怎样才能解决这个问题 model.py class Field_Of_Research (models.Model): for_id = models.Po

我的Django数据库(SQLite)上有两个表,一个是研究和会议领域。会议有三个外键与研究领域的主键相关。在migrate命令期间,我填充数据库(从csv文件读取),但是当插入两个具有相同外键值(对于所有三个键)的会议时,将显示唯一约束failed。 如果我使用admin页面插入Conferences,数据库会给出相同的错误。 我怎样才能解决这个问题

model.py

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
填充.py

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(f'Fields of Research done.')
#Populates the conferences database
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(f'Conferences done.')
错误


为什么要为同一个模型使用3个外键字段?嗨,我想你忘了使用“默认值”:因为名称不匹配,它尝试创建(for_id,name),而for_id对它有一个约束=>失败。尝试对CirconEvent使用“默认值”@Andrea尝试删除
至=
您是否可以更新您的问题,以显示模型的元,因为从您显示的代码中,没有
唯一的定义,我想确保您没有对单个外部模型设置唯一的合同key@MehaParekh一次会议最多可以有三个领域:研究。我知道,这不是最好的方法,所以我已经在考虑多对多的解决方案,但我想先解决这个问题。模型没有元,所以没有唯一的_,我一起解决了这个问题。这些表没有更新或创建,所以我从数据库中手动删除了它们,并取消了所有迁移/缓存文件。在我使用了以下命令之后:py manage.py migrate--fake MyApp zero py manage.py migrate
  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