Django外国密钥参考名称冲突



位置应用程序模型:

class States(models.Model):
    state_name = models.CharField(max_length=200, unique=True)
    update_time = models.DateTimeField(auto_now=True, auto_now_add=False)
    create_time = models.DateTimeField(auto_now=False, auto_now_add=True)
    def __str__(self): 
        return self.state_name
class Districts(models.Model):
    state = models.ForeignKey(States, on_delete=models.CASCADE)
    dis_name = models.CharField(max_length=200, unique=True)
    update_time = models.DateTimeField(auto_now=True, auto_now_add=False)
    create_time = models.DateTimeField(auto_now=False, auto_now_add=True)
    def __str__(self): 
        return self.dis_name
class Places(models.Model):
    district    =  models.ForeignKey(Districts, on_delete=models.CASCADE)
    place_name  =  models.CharField(max_length=200, unique=True,)
    pin_no      =  models.IntegerField(null=True)
    update_time =  models.DateTimeField(auto_now=True, auto_now_add=False)
    create_time =  models.DateTimeField(auto_now=False, auto_now_add=True)
    def __str__(self): 
        return self.place_name

假设,我想映射一些带有区名称的信息。但是在管理面板中,它显示了所有地区名称。(但冲突是两个州的区域名称)

我想用这种方式:工作应用模型:

from location.models import States, Districts, Places
    class Info(models.Model):   
        dis_name    =  models.ForeignKey(Districts, on_delete=models.CASCADE)
        info_name   =  models.CharField(max_length=500)
        sort_name   =  models.CharField(max_length=50)

在admin.py

class InfoAdmin(admin.ModelAdmin):
    list_display = ("dis_name", "info_name", "sort_name")
    ordering = ('id',)

但是在管理面板中显示了所有地区名称。

所以我该怎么办。为了避免冲突。另外,如果我使用自己的ID,则消除了冲突。但是在管理面板中,它仅显示所有地区的所有ID字段。这不是人类可读。

示例:

我想要的,假设有2个州的地区名称说德里州和加尔各答的地区名称相同。然后在管理面板2中显示大吉岭。那我怎么能确定哪个地区来了?

您使 dis_name district> district 类中唯一。这将使您无法拥有一个以上同名的一个地区,即使它们在不同的州。

plot_name 中也是如此

尝试:

class Districts(models.Model):
  state = models.ForeignKey(States, on_delete=models.CASCADE)
  dis_name = models.CharField(max_length=200, unique=False)
  update_time = models.DateTimeField(auto_now=True, auto_now_add=False)
  create_time = models.DateTimeField(auto_now=False, auto_now_add=True)
  def __str__(self): 
     return self.dis_name +' - '+ self.state.state_name
class Places(models.Model):
  district    =  models.ForeignKey(Districts, on_delete=models.CASCADE)
  place_name  =  models.CharField(max_length=200, unique=False)
  pin_no      =  models.IntegerField(null=True)
  update_time =  models.DateTimeField(auto_now=True, auto_now_add=False)
  create_time =  models.DateTimeField(auto_now=False, auto_now_add=True)
  def __str__(self): 
    return self.place_name + ' - ' + self.district.dis_name

更新:现在将在Admin面板中显示带有区名称的相应状态名称,带有位置名称

的地区名称

最新更新