Dir*_*irk 10 python mysql django model
我试图找出如何布置我的两个Django模型,以便在将新模型保存到数据库时,其主键递增,使得它是具有相同外键的所有记录的下一个最高值.
这问题就像这个问题,但我想知道你将如何在Django中做到这一点.以下是该问题的摘录,该问题表明了类似的情况:
id | job_id | title
0 1 hi
1 1 hello
2 1 goodbye
0 2 hi
1 2 hello
Run Code Online (Sandbox Code Playgroud)
我知道你不能在Django模型中有多个主键,你可以使用unique_together,但文档说它在UNIQUE语句中使用了等效CREATE语句.将
class ModelA(models.Model):
key = models.PositiveIntegerField(primary_key = True)
fk = models.ForeignKey(ModelB)
def Meta(self):
unique_together = ("key", "fk")
Run Code Online (Sandbox Code Playgroud)
在模型中使用这个答案来完成我正在寻找的东西?模型之间的关系是ModelA具有多个ModelBs 的模型,但每个模型ModelB只有一个ModelA.
San*_*wal 11
Dirk,你必须对模型进行一些更改(如果允许的话),正如Ignacio所说的那样.所以,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)
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我必须overridden the default save method来计算的方法键值cal_key回吐fk as argument.因此,请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
Run Code Online (Sandbox Code Playgroud)
该cal_key方法清楚地表明了您实际需要的内容.