Python 如何在django模型字段中写入具有唯一列的多行
我有一个django模型,在mysql中有以下演示: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
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在某些行中可能是相等的,因为字典可以有多个项。在我看来,它足以存储指向下一个和上一个项目的指针。因此,您将提高所使用的内存量,并且该结构将在数据库中进行逻辑链接。我认为有很多带指针的解决方案,我建议你用谷歌搜索一下。在我看来,没有必要保留每个项目的完整列表