1
我希望共享外键的Feature模型的实例具有ID。当创建新功能时,我想自动递增该ID。Django - 与外键相关的主键字段
如果你看看从数据库中的功能表这个打印,每个功能都有一个外键(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
我不喜欢这个,这是有必要查询所有的功能来获得最高的id_relat在th e cal_id_relat方法。
尝试将AutoField改为PositiveIntegerField。 – 2014-09-10 18:19:50
你真的需要使用id_relat字段吗?每个模型都有字段ID,它是正数,整数和100%唯一。 – 2014-09-10 20:08:04
id_relat是一个id,它是共享相同shapefile外键的特性的唯一标识。如果外键不同,两个特征可以具有相同的id_relat – 2014-09-11 12:23:06