gpt4 book ai didi

python - Django模型基于外键自增主键

转载 作者:IT王子 更新时间:2023-10-28 23:49:11 24 4
gpt4 key购买 nike

我试图弄清楚如何布置我的两个 Django 模型,以便在将新模型保存到数据库时,它的主键会递增,使其成为所有具有相同记录的下一个最高值外键。

很像 this question asked ,但我想知道你将如何在 Django 中做到这一点。以下是演示类似情况的问题的摘录:

id | job_id | title
0 1 hi
1 1 hello
2 1 goodbye
0 2 hi
1 2 hello

我知道you can't have multiple primary keys in a Django model你可以使用unique_together ,但文档说它在 CREATE 语句中使用等效的 UNIQUE 语句。会

class ModelA(models.Model):
key = models.PositiveIntegerField(primary_key = True)
fk = models.ForeignKey(ModelB)

def Meta(self):
unique_together = ("key", "fk")

在模型中使用 this answer完成我正在寻找的东西?模型之间的关系是一个ModelA有多个ModelB,而每个ModelB只有一个ModelA

最佳答案

您必须对模型进行一些更改(如果可能)。所以,ModelA 应该看起来像这样

class ModelA(models.Model):
key = models.PositiveIntegerField()
fk = models.ForeignKey(ModelB)

def Meta(self):
unique_together = ("key", "fk")

def save(self, *args, **kwargs):
key = cal_key(self.fk)
self.key = key
super(ModelA, self).save(*args, **kwargs)

如您所见,我覆盖了默认值 save method 在以 fk 为参数的 cal_key 函数中计算键值。因此,在模型文件中定义 cal_key 函数。

def cal_key(fk):
present_keys = ModelA.objects.filter(fk=fk).order_by('-key').values_list('key', flat=True)
if present_keys:
return present_keys[0]+1
else:
return 0

cal_key 函数清楚地表明了您的实际需要。

关于python - Django模型基于外键自增主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8950010/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com