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