Python 如何在django模型字段中写入具有唯一列的多行

Python 如何在django模型字段中写入具有唯一列的多行,python,django,Python,Django,我有一个django模型,在mysql中有以下演示: id project_id X Y 其中模型名为ProjectModel,如下所示: class ProjectModel(models.Model): project = models.ForeignKey(Project, on_delete=models.CASCADE, unique=False) X = models.TextField(null=True) Y = models.Text

我有一个django模型,在mysql中有以下演示:

id    project_id    X    Y
其中模型名为
ProjectModel
,如下所示:

class ProjectModel(models.Model):
    project = models.ForeignKey(Project, on_delete=models.CASCADE, unique=False)
    X = models.TextField(null=True)
    Y = models.TextField(null=True)
这是我的代码:

projects = Project.objects.all()

for project in projects:
   model = ProjectModel()
   all_dict = extract_dict(project)
   # its like all_dict = {'item1':{'X': 221, 'Y': 'NewYork'}, 'item2':{'X':2.3, 'Y':'Milan'}, ...}
   for k, value in all_dict.items():
       model.project_id = project.id
       model.X = value['X']
       model.Y = value['Y']
       model.save()
我希望这样的事情会发生:

id    project_id    X    Y
 1     21           221  NewYork
 2     21           2.3  Milan
 3     23           65   Berlin
 4     24           38   Amsterdam
 ....
我想在一行中写入每个项目的id甚至相等,然后使用groupby聚合它们。但我得到的错误如下:

django.db.utils.IntegrityError:(1062,“密钥的重复条目'21' “项目id唯一”(项目id唯一)


一切都很简单。您正在使用ForeignKey进行链接,但没有正确链接模型

projects = Project.objects.all()

for project in projects:
    model = ProjectModel()
    all_dict = extract_dict(project)
    
    for k, value in all_dict.items():
        model.project = project
        model.X = value['X']
        model.Y = value['Y']
        model.save()
因此,您将使用foreignKey链接项目和projectmodel模型,而在数据库中,链接将由id项目跟踪。我建议您再次阅读django foreignkey文档

models.py

class TestModel(models.Model):
    field_one = models.IntegerField() #idk what you want to save as x and y
    field_two = models.IntegerField() #idk what you want to save as x and y
    current_model = models.ForeignKey(to=ProjectModel, on_delete=models.CASCADE)
因此:

projects=Project.objects.all()
对于项目中的项目:
模型=项目模型()
全部目录=摘录目录(项目)
对于k,所有目录项()中的值:
model.project=项目
test=TestModel(字段_one=value['X'],
字段_two=值['Y'],
当前_模型=模型)
model.save()
test.save()

谢谢。但它只保存了最后一行中所有dict的值。因此,如果我的字典有多个条目,只需保存最新的条目!你们知道为什么吗?你们能描述一下你们创建模型的主要想法吗?我认为模型的结构存在问题。现在,每次循环时都试图覆盖该字段。如果你想添加很多值​​对于某个领域,您可能需要重新考虑您的数据库体系结构。也许值得为这些值建立一个单独的模型​​为每个新模型创建一个foreignKey字段。是的,我实际上想的是创建单独的模型,但是我不知道如何在它们之间建立连接。这是我的结构,每个项目都有一个字典,其中包含键和值,它们是列表。在定义的模型中,我试图向每个字段添加,
id,project\u id,first\u key,它的值..
,下一个字段
id,project\u id,second\u key,它的值..
project\u id在某些行中可能是相等的,因为字典可以有多个项。在我看来,它足以存储指向下一个和上一个项目的指针。因此,您将提高所使用的内存量,并且该结构将在数据库中进行逻辑链接。我认为有很多带指针的解决方案,我建议你用谷歌搜索一下。在我看来,没有必要保留每个项目的完整列表