动态场模型Djang

2024-04-18 14:24:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图弄清楚如何根据前一个字段的输入动态更改ModelForm字段。在

例如,如果我有以下类型的模型:

class Phone(models.Model):
     name = models.CharField(max_length=10)

class Series(models.Model):
     name = models.CharField(max_length=10)

class Manufacturer(models.Model):
     phone = models.ForeignKey('Phone') 
     series = models.ForeignKey('Series')     

class ManufacturerForm(ModelForm):
     class Meta:
         model = Manufacturer

这将生成一个表单(ManufacturerForm),其中包含数据库中电话和系列条目的下拉选项。例如,是否可以根据用户输入的phone创建一组不同的series项?在

我已经读过关于使用__init__方法来实现这一点的,这是基于我在this blog post上所读到的,但是我不确定如何在给定的场景中执行这一点。或者也许有更好的方法来实现你所做的?谢谢你的建议!在


编辑:添加窗体的视图。在

^{pr2}$

@super9提到使用ajax请求来更改这些元素。我需要检查if request.is_ajax(),但在我看来,我应该在什么时候检查这个呢?如何根据ajax请求添加或更改queryset?在

谢谢你的建议。在


编辑:尝试使用django智能选择

不知道如何设置我的模型来利用django智能选择来完成我正在尝试的。以下是我如何构建我的模型:

from smart_selects.db_fields import ChainedForeignKey 

class Phone(models.Model):
    phone = models.CharField(max_length=10)

class Series(models.Model):
    series = models.CharField(max_length=10)
    phone = models.ForeignKey(Phone)

class SeriesModel(models.Model):
    model = models.CharField(max_length=10)
    series = models.ForeignKey(Series)

class Manufacturer(models.Model):
    phone = models.ForeignKey(Phone)
    series = ChainedForeignKey (Series, chained_field = "phone", chained_model_field = "phone")
    series_model = ChainedForeignKey (SeriesModel, chained_field = "series", chained_model_field = "series")

但是当我查看我的表单(ModelForm)时,series_model的字段没有正确地链接到series。我是否遗漏了让智能选择在第二层抽象上工作的东西?在


编辑:以上代码现在有效。在


Tags: fieldmodelmodelsphonelengthmaxclassseries