Django模型选择字段 - 取决于其他字段的选择

dea*_*ase 13 python django django-models django-forms

我需要带有2个字段的django modelform,其中第二个字段选择列表取决于在第一个字段中选择的内容.我的模特:

class Offer(BaseModel):

    VEHICLE_TYPES = (
        ('personal','Personal car'),
        ('truck','Truck'),
    )
    vehicle_type = models.CharField(max_length=32, choices=VEHICLE_TYPES, default='personal', verbose_name='Vehicle type')

    PERSONAL_MAKES = (
        ('',''),
    )
    TRUCK_MAKES = (
        ('',''),
    )
    make = models.CharField(max_length=32)#what more??
Run Code Online (Sandbox Code Playgroud)

如果vehicle_type设置为personal,我如何将make字段的选项设置为PERSONAL_MAKES?我怎样才能做到这一点?是否可以在模型级别?

Eli*_*iot 5

您可能不能,因为它取决于用户与表单的交互:您的服务器无法事先知道用户在将表单发送到浏览器之前将选择哪个元素.您可以使用ajax实现此目的.我认为一个工作过程可能是:

  • 创建包含所有字段的表单,并隐藏make字段
  • 创建一个视图(我将其称之为AjaxMakeFieldView),它将捕获带有vehicle_type参数的ajax请求并返回HTML make field,并填充相关数据.在URLConf中为此视图添加URL.
  • 在你的模板中,添加一个Javascript绑定:当用户选择a时vehicle_type,浏览器会发送一个ajax请求AjaxMakeFieldViewmake用返回的HTML 替换隐藏字段

如果你不想要javascript,另一种方式是两步形式:

  • vehicle_type字段的第一个表单
  • 提交第一个表单后,您的用户将获得带有make字段的第二个表单,根据vehicle_type第一个表单中的选择填充初始数据.

我从来没有这样做过,但是关于Form向导的Django文档似乎是一个很好的起点.