我希望共享外键的Feature模型的实例具有id。当创建新功能时,我想自动增加该ID。
如果您从数据库中的要素表中查看此打印件,每个要素都有一个外键(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。
答案 0 :(得分:1)
您的Django应用程序可以在> 1个线程中执行,因此您的方法具有潜在的危险性。可以同时调用cal_id_relat,并为所有调用返回相同的id。