django smart-selects 应用
我在使用django的“smart-selects”这个应用时遇到了问题。它无法正确填充我的链式字段的选择框。GitHub上的“readme”文件“https://github.com/digi604/django-smart-selects”给出了以下说明。
- 链式字段是指在同一个模型中,应该与之关联的字段。
- 链式模型字段是指与链式字段关联的模型中的字段。
我觉得这些说明有点难懂,而且没有展示关于大陆和县的模型,这让我理解起来更困难。
我之前也发过一个相关的问题,但没有得到回复。那个问题里有更多关于我具体模型的信息。“http://stackoverflow.com/questions/9155350/django-smart-selects-second-level-wont-populate”
希望能有一些“django-smart-selects”的专家能帮我解决这个问题。谢谢!
from smart_selects.db_fields import ChainedForeignKey
class Location(models.Model)
continent = models.ForeignKey(Continent)
country = ChainedForeignKey(
Country,
chained_field="continent",
chained_model_field="continent",
show_all=False,
auto_choose=True
)
area = ChainedForeignKey(Area, chained_field="country", chained_model_field="country")
city = models.CharField(max_length=50)
street = models.CharField(max_length=100)
3 个回答
0
在这个例子中,for country = ChainedForeignKey() 这个字段,chained_field="continent" 是指 Location 类里的 "continent" 字段。而 chained_model_field="continent" 是指 Country 模型里面的一个 "continent" 字段(这个字段在例子中没有展示出来)。
0
我理解是这样的,dragonx。不过我显然还有些没明白。
我在想其他的类应该是这样的:
class Continent(models.Model):
continent = models.CharField(max_length=45)
def __unicode__(self):
return self.continent
class Country(models.Model):
continent = models.ForeignKey(Continent)
country = models.CharField(max_length=45)
def __unicode__(self):
return self.county
在国家类中,“continent”是一个整数字段,它对应着大陆类中的ID字段(外键/字段),这个字段用来进行连接。你也是这么理解的吗?
2
你需要在urls.py文件中添加这一行:
url(r'^chaining/', include('smart_selects.urls')),
我就是这么做的,结果成功了:
#=================================
#models.py
from smart_selects.db_fields import ChainedForeignKey
class Continent(models.Model):
continent = models.CharField(max_length = 45)
def __unicode__(self):
return unicode(self.continent)
class Country(models.Model):
continent = models.ForeignKey(Continent)
country = models.CharField(max_length = 45)
def __unicode__(self):
return unicode(self.country)
class Area(models.Model):
country = models.ForeignKey(Country)
area = models.CharField(max_length = 45)
def __unicode__(self):
return unicode(self.area)
class Location(models.Model):
continent = models.ForeignKey(Continent)
country = ChainedForeignKey
(
Country,
chained_field = "continent",
chained_model_field = "continent",
show_all = False, auto_choose = True
)
area = ChainedForeignKey(Area, chained_field = "country", chained_model_field = "country")
city = models.CharField(max_length = 50)
street = models.CharField(max_length = 100)
#=================================
#admin.py
from yourapp.models import Continent
from yourapp.models import Country
from yourapp.models import Area
from yourapp.models import Location
class ContinentAdmin(admin.ModelAdmin):
pass
class CountryAdmin(admin.ModelAdmin):
pass
class AreaAdmin(admin.ModelAdmin):
pass
class LocationAdmin(admin.ModelAdmin):
pass
admin.site.register(Continent, ContinentAdmin)
admin.site.register(Country, CountryAdmin)
admin.site.register(Area, AreaAdmin)
admin.site.register(Location, LocationAdmin)