Django - 与外键相关的主键字段

时间:2014-09-10 16:28:36

标签: django

我希望共享外键的Feature模型的实例具有id。当创建新功能时,我想自动增加该ID。

enter image description here

如果您从数据库中的要素表中查看此打印件,每个要素都有一个外键(shapefile_id)和共享相同shapefile_id的那些,它们具有唯一ID(id_relat)

我想知道是否有更好的方法来处理这个问题,而不是我到目前为止所发现的:

class Shapefile(models.Model):
    filename = models.CharField(max_length=255)


class Feature(models.Model):
    shapefile = models.ForeignKey(Shapefile)
    id_relat = models.PositiveIntegerField(db_index=True)

    def Meta(self):
        unique_together = (("shapefile", "id_relat"),)

    def save(self, *args, **kwargs):
        if not self.id_relat: #assign incremented id only to new feature
            self.id_relat = cal_id_relat(self.shapefile)
        super(Feature, self).save(*args, **kwargs)

def cal_id_relat(shapefile):
    ids_relat = Feature.objects.filter(shapefile=shapefile).order_by('-id_relat').values_list('id_relat',flat=True)
    if ids_relat:
        return ids_relat[0]+1
    else:
        return 0

我不喜欢这样,有必要查询所有功能以获得cal_id_relat方法中最高的id_relat。

1 个答案:

答案 0 :(得分:1)

您的Django应用程序可以在> 1个线程中执行,因此您的方法具有潜在的危险性。可以同时调用cal_id_relat,并为所有调用返回相同的id。