1
외래 키를 공유하는 피쳐 모델의 인스턴스에 ID가 있어야합니다. 새 기능을 만들 때 해당 ID를 자동으로 증가시킵니다. 데이터베이스의 기능을 테이블에서이 인쇄를 살펴 경우Django - 외래 키와 관련된 기본 키 필드
각 기능은 외부 키 (shapefile_id)가 같은 shapefile_id을 공유하는 사람들, 그들은 (id_relat) 고유 ID를 가지고
나는 내가 지금까지 발견 한 것보다이 처리하는 더 나은 방법이 있는지 알고 싶습니다 : 내가이처럼 해달라고
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
, 그것을 얻기 위해 모든 기능을 조회 할 필요가 있어요 th에서 가장 높은 id_relat e cal_id_relat 메소드.
PositiveIntegerField 대신 AutoField를 사용해보세요. –
정말 id_relat 필드를 사용해야합니까? 모든 모델에는 양수, 정수 및 100 % 고유 한 필드 ID가 있습니다. –
id_relat은 동일한 shapefile 외래 키를 공유하는 기능에 고유하고 고유 한 ID입니다. 외래 키가 다른 경우 두 기능은 동일한 id_relat을 가질 수 있습니다. –