获取Django Admin中的状态下拉列表

获取Django Admin中的状态下拉列表,django,django-admin,Django,Django Admin,我为一家企业的上市制作了一些基本模型,如下所示: class Business(models.Models): id = models.IntegerField(primary_key=True) name = models.CharField(max_length=225, blank=True) address = models.CharField(max_length=150, blank=True) city = models.CharFiel

我为一家企业的上市制作了一些基本模型,如下所示:

class Business(models.Models):
    id = models.IntegerField(primary_key=True)  
    name = models.CharField(max_length=225, blank=True)  
    address = models.CharField(max_length=150, blank=True)  
    city = models.CharField(max_length=150, blank=True)   
    state_id = models.IntegerField(null=True, blank=True)  
    zip = models.CharField(max_length=33, blank=True)  
    country = models.CharField(max_length=150, blank=True)  
    url = models.CharField(max_length=765, blank=True)  

class States(models.Model):  
    id = models.IntegerField(primary_key=True)  
    name = models.CharField(max_length=96)  
    state_abbr = models.CharField(max_length=24, blank=True)  
在管理中,当我编辑每个业务时,它会显示state_id字段。但我如何将它与状态模型连接起来,以显示状态的选择下拉列表呢


另外,如何从企业的角度显示州缩写

您需要使用ForeignKey字段。 进行以下更改

class Business(models.Models):
    id = models.IntegerField(primary_key=True)  
    name = models.CharField(max_length=225, blank=True)  
    address = models.CharField(max_length=150, blank=True)  
    city = models.CharField(max_length=150, blank=True)   
    #state_id = models.IntegerField(null=True, blank=True)  
    # Define a new state field that creates a ForeignKey relationship with States
    state = models.ForeignKey('States', null=True, blank=True)
    zip = models.CharField(max_length=33, blank=True)  
    country = models.CharField(max_length=150, blank=True)  
    url = models.CharField(max_length=765, blank=True)  

class States(models.Model):  
    id = models.IntegerField(primary_key=True)  
    name = models.CharField(max_length=96)  
    state_abbr = models.CharField(max_length=24, blank=True)

    #Define the __unicode__ method, which is used by related models by default.
    def __unicode__(self):
        return self.state_abbr
默认情况下,在数据库中创建列名时,ForeignKey字段将“\u id”附加到字段名。因此,业务类中新的“state”字段将自动使用您之前定义的列“state_id”,除非您更改了Django的一些默认行为

有关这方面的更多信息:

  • 退房
  • 在stackoverflow.com上

  • 不需要单独状态表的替代方案:

    from django.contrib.localflavor.us.us_states import STATE_CHOICES
    
    class Business(models.Models):
        ...
        state = models.CharField(max_length=2, choices=STATE_CHOICES, null=True, blank=True)  
        ...
    
    2015年编辑(django 1.8) 您应该检查django官方的localflavor repo:

    有些用于此特定用途


    文档可用。

    哇,就是这样。谢谢下面关于使用提供的localflavor抽象的评论做得很好。当只需要一份简单的美国各州名单时,这一点尤其可取。但是,在我们的一个应用程序中,有些州还需要其他元数据,有些州完全从应用程序中删除(在这些州不可用)。在这种情况下,维护我们自己的状态数据表最有意义。它在一个名为django localflavor的应用程序(可通过pip获得)中单独管理。
    from localflavor.us.models import USStateField
    
    class Business(models.Models):
        …
        state = USStateField(null=True, blank=True)
        …