过滤ForeignKeyFeild在其他字段中按值选择字段

时间:2012-02-22 18:07:28

标签: django django-forms

所以我有一些看起来像这样的Django模型:

class City(models.Model):
   name = models.CharField("City", max_length=200)

   def __unicode__(self):
     return self.name

   class Meta:
     verbose_name_plural="Cities"

 class Neighborhood(models.Model):
   name = models.CharField("Neighborhood", max_length=200)
   city = models.ForeignKey(City, verbose_name='City')

   def __unicode__(self):
     return self.name + " in " + str(self.city)
 class Application(models.Model):
   NUM_BED_CHOICES = ((1, u'Rollin Solo'), (2, u'2 Bedrooms'), (3, u'3 Bedrooms'), (4, u'4 Bedrooms'),)
   LEASE_LENGTH_CHOICES = ((u'SUM', u'Summer'), (u'1YR', u'One Year'), (u'2YR', u'Two Years'), (u'2Y+', u'Two Years+'),)

   user = models.ForeignKey(User)
   neighborhood = models.ForeignKey(Neighborhood, verbose_name="Neighborhood")
   moveinDate = models.DateField("Move-in Date")
   numberOfBedrooms = models.SmallIntegerField("Number of Bedrooms", choices=NUM_BED_CHOICES)
   leaseLength = models.CharField("Lease Length", max_length=3, choices=LEASE_LENGTH_CHOICES)
   bedroomBudget = models.DecimalField("Budget Per-Bedroom", max_digits=10, decimal_places=2)
   hasPet = models.BooleanField("Has Pet")
   hasBeenPlaced = models.BooleanField("Has Been Placed", default=False)

   class Meta:
     verbose_name = "Application"

我有一个适用的模型表格,就是这样:

class ApplicationForm(ModelForm):
  class Meta:
    model = Application
    exclude = ('hasBeenPlaced','user',)

我希望能够向我的ApplicationForm添加一个选择窗口小部件,允许用户从我的城市模型中的某个城市对象中进行选择,然后基于此过滤他们对社区的选择那个选择。例如:如果他们选择芝加哥'在我要添加的这个额外字段中,所有在芝加哥没有的社区都将从可用社区列表中删除,以便在ApplicationForm中进行选择。 Django有可能吗?如果是这样,那么如何完成这项任务?

1 个答案:

答案 0 :(得分:2)

从技术上讲,这已不再是Django的范畴了。呈现页面后,Django就完成了。这样的事情需要JavaScript,特别是AJAX。您只需创建一个视图,以便在JSON中返回城市的邻域,然后在城市选择框的onchange事件被触发时使用AJAX获取该响应。使用JSON为neighboorhood选择框构建新选项,然后用它替换旧选项。

StackOverflow上有关于如何具体完成所有这些的一百万个问题 - 很多是我自己编写的。