从Django管理界面添加实例

3
这是我的课程外观。
class School(models.Model):
    state = models.ForeignKey(State, on_delete=models.CASCADE)
    region = models.ForeignKey(Region, on_delete=models.CASCADE)
    cluster = models.ForeignKey(Cluster, on_delete=models.CASCADE)
    school_name = models.CharField(max_length=250)
    facilitator = models.CharField(max_length=250)
    f_number = models.IntegerField()
    f_email = models.EmailField()
    school_logo = models.FileField(default='')
    school_strength = models.IntegerField()

在这个问题中,州、地区和集群也被视为类别。我试图创建一个按照三个等级分类的学校网络,即州、地区和集群。
我假设当我从Django管理界面添加学校时,如果我选择了某个州,它会过滤出该州的地区;如果我选择了某个地区,它会过滤出该地区的集群,以此类推,这样就很容易操作了。但是,似乎并不起作用。虽然在选择特定的州和地区后,在添加学校时,来自所有州和地区的所有集群都出现在了集群下拉列表中。
有没有解决方案呢?或者目前在Django中我们还没有这样的选项?

有趣的问题。我也想知道这是否可能。 - Pablo Vergés
这将真正帮助管理员管理网站中的内容。让我们希望有人能提出一个解决方案。 - venkat mani sai
@PabloVergés,我已经回答了这个问题,希望能对你有所帮助!!! - Astik Anand
我也遇到了这个问题,但是后来我使用了“智能选择”功能,然后就很棒了。 - Astik Anand
1个回答

1

尝试使用 django-smart-selects 包中的 ChainedForeignKey,它就像魔法一样工作。

smart_selects 的安装

pip install django-smart-selects

项目设置.py
INSTALLED_APPS=[
    . . . . .
    . . . . .
    'smart_selects',
    . . . . .
]

项目中的 urls.py 文件

urlpatterns = [
    . . . . .
    url(r'^admin/', include(admin.site.urls)),
    url(r'^chaining/', include('smart_selects.urls')),
    . . . . .
]

请参阅Django智能选择安装

ChainedForeignKey的工作原理

from smart_selects.db_fields import *

class State(models.Model):
    stateName = models.CharField(max_length=500)
    . . . . 

class Region(models.Model):
    state = models.ForeignKey(State, on_delete=models.CASCADE)
    regionName = models.CharField(max_length=500)
    . . . . .
    . . . . .


class Cluster(models.Model):
    state = models.ForeignKey(State, on_delete=models.CASCADE)
    region = ChainedForeignKey(Region,chained_field="state",chained_model_field="state", show_all=False, auto_choose=True, sort=False, on_delete=models.CASCADE)
    clusterName = models.CharField(max_length=500)
    . . . . .
    . . . . .  



class school(models.Model):
    state = models.ForeignKey(State, on_delete=models.CASCADE)
    region = ChainedForeignKey(Region, chained_field="state",chained_model_field="state", show_all=False, auto_choose=True, sort=False, on_delete=models.CASCADE)
    cluster = ChainedForeignKey(Cluster, chained_field="region",chained_model_field="region", show_all=False, auto_choose=True, sort=False, on_delete=models.CASCADE)
    schoolName = models.CharField(max_length=500)
    . . . . 
    . . . .

尝试这个,在管理区域它效果很好。

如何使用它? 我是一个初学者 :p - venkat mani sai
好的,等一下我给你详细信息。 - Astik Anand
@PabloVergés,你找到你要找的东西了吗? - Astik Anand
非常感谢。它完全正常工作。一切都很好,但我只是好奇为什么所有子子类都有chainedforiegnkey而直接子类没有? - venkat mani sai
@venkatmanisai,如果有帮助,请投票并选择答案。感谢您的合作。 - Astik Anand
您可以前往该链接获取更多信息。 - Astik Anand

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接