如何解决如何在 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 举报,一经查实,本站将立刻删除。