如何在 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.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
 ....

我想在一行中编写甚至具有相同 project_id 的每个项目,然后使用 groupby 将它们聚合。但我收到如下错误

django.db.utils.IntegrityError: (1062,"重复条目 '21' 为关键 'project_id_UNIQUE'")

解决方法

一切都很简单。您正在为链接使用外键,但您没有正确链接模型

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()

因此,您将使用外键链接项目和项目模型模型,而在数据库中,该链接将由项目 id 跟踪。建议你再看一遍django外键文档

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()

for project in projects:
    model = ProjectModel()
    all_dict = extract_dict(project)

    for k,value in all_dict.items():
        model.project = project
        test = TestModel(field_one=value['X'],field_two=value['Y'],current_model= model)
        model.save()
        test.save()

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...