如何让一对多/外键在django中工作?

如何让一对多/外键在django中工作?,django,foreign-keys,Django,Foreign Keys,以下是我编写的代码: 型号。py: class Name_overall(models.Model): rank = models.IntegerField() name = models.CharField(max_length=50) frequency = models.IntegerField() def __unicode__(self): return self.name class Name_state(models.Mod

以下是我编写的代码:

型号。py:

class Name_overall(models.Model):
    rank = models.IntegerField()
    name = models.CharField(max_length=50)
    frequency = models.IntegerField()    
    def __unicode__(self):
        return self.name

class Name_state(models.Model):  
    gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
    name_overall = models.ForeignKey(Name_overall, db_column='name')
    frequency = models.IntegerField()
    rank = models.IntegerField()
    state = models.CharField(max_length=2, choices=STATE_CHOICES)
    def __unicode__(self):
        return self.state
def single_name(request, baby_name):
    baby_list = get_list_or_404(Name_overall, name=baby_name)
    return render_to_response('names/single_name.html', {'baby_list': baby_list})
{{ baby_list.name_state_set.all }}
视图。py:

class Name_overall(models.Model):
    rank = models.IntegerField()
    name = models.CharField(max_length=50)
    frequency = models.IntegerField()    
    def __unicode__(self):
        return self.name

class Name_state(models.Model):  
    gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
    name_overall = models.ForeignKey(Name_overall, db_column='name')
    frequency = models.IntegerField()
    rank = models.IntegerField()
    state = models.CharField(max_length=2, choices=STATE_CHOICES)
    def __unicode__(self):
        return self.state
def single_name(request, baby_name):
    baby_list = get_list_or_404(Name_overall, name=baby_name)
    return render_to_response('names/single_name.html', {'baby_list': baby_list})
{{ baby_list.name_state_set.all }}
single\u name.html:

class Name_overall(models.Model):
    rank = models.IntegerField()
    name = models.CharField(max_length=50)
    frequency = models.IntegerField()    
    def __unicode__(self):
        return self.name

class Name_state(models.Model):  
    gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
    name_overall = models.ForeignKey(Name_overall, db_column='name')
    frequency = models.IntegerField()
    rank = models.IntegerField()
    state = models.CharField(max_length=2, choices=STATE_CHOICES)
    def __unicode__(self):
        return self.state
def single_name(request, baby_name):
    baby_list = get_list_or_404(Name_overall, name=baby_name)
    return render_to_response('names/single_name.html', {'baby_list': baby_list})
{{ baby_list.name_state_set.all }}

single_name.html模板中没有显示任何内容。如果我将其更改为{{baby_list}},则那里有一个对象,但我无法访问Name_state类。我想我应该能够访问Name_state,因为外键。我错过了什么

baby_列表
上下文变量是一个查询集。您需要迭代它并访问循环中的ForeignKey

{% for item in baby_list %}
  {{item.name_state_set.all}}
  #iterate the name_state_set
  {% for obj in item.name_state_set.all %}
    {{obj}}
  {% endfor %}
{% endfor %}

不是对您实际问题的回答,但是如果您的state字段用于保存美国州的代码,您可能希望使用django.contrib.localflavor.US.models.USStateField,而不是具有有限选择的显式CharField。对于澳大利亚来说,在django.contrib.localflavor.au.au_states中有一个预定义的常量STATE_选项,如果你仍然在其他地方,还有一堆其他的本地风味可供查找。在一个地方保留这类常量并重用它们对我来说似乎是一种很好的做法。