微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 django 模型字段中用唯一列编写多行

如何解决如何在 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()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?