当前位置: 首页 > 面试题库 >

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

韦飞尘
2023-03-14
问题内容

我需要具有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??

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


问题答案:

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

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

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

  • 具有vehicle_type字段的第一种形式
  • 提交第一个表单后,您的用户将获得带有make字段的第二个表单,该字段的初始数据取决于vehicle_type在第一个表单中选择的字段。

我从未做过,但是Form向导上的Django文档似乎是一个不错的起点。



 类似资料:
  • 问题内容: 我试图根据我选择的字段之一的值显示和隐藏一些表单字段。我希望使用数组来保存每个选择值应显示的内容和不应该显示的内容,以免将我从庞大的switch语句中删除,但无法弄清楚该如何做。 我正在使用PHP和jQuery。任何帮助都会很棒。 问题答案: 尝试这样的事情: 然后在jQuery中:

  • 问题内容: 我有一个Django应用程序,想要在用户的个人资料中显示多个选择复选框。然后,他们将能够选择多个项目。 这是我的models.py的简化版本: 和我的形式课: 还有我的views.py: 我可以看到POST仅发送一个值: 并且本地vars参数正在发送一个列表: 所有表单字段都显示正确,但是当我提交POST时,我得到一个错误 错误绑定参数7-可能是不受支持的类型。 我是否需要在视图中进一

  • 问题内容: 我有以下型号: 在管理界面中,当创建新演示时,在用户从下拉列表中选择类别之后,我想限制“项目”下拉列表中的选择数量。如果用户选择其他类别,则项目选择应相应更新。我想在客户端上限制项目选择,甚至在服务器上进行表单验证之前。这是为了提高可用性,因为项目列表可能超过1000个,能够按类别缩小范围将有助于使其更易于管理。 是这样做的“捷径”还是自定义JavaScript是这里的唯一选择? 问题

  • 我在django上为博客文章创建了一个模型。每个帖子有两个状态选择:发布或草稿。如何在帖子保存后将发布更改为已发布? 这是我的代码: 来自django。数据库导入模型 从django.contrib.auth.models导入用户 在这里创建您的模型。 状态=((0,“草稿”), (1,“发布”),) 班级职务(models.Model): 从django.contrib导入管理员从。 类Post

  • 这是我的主页,在那里我选择了一个选项字段。 opt1.php: 这是我的javascript,在这里我从上面的select获得值,并传递给opt2.php 这是我的opt2.php页面,用于显示sub select。 实际上,这并没有产生预期的结果。 有没有逻辑上或处理上的错误?

  • 不知道我错过了什么。当选择下拉的值时,窗体被激发,因此我的其他字段显示错误。我怎么才能阻止它?这是密码 Widget build(BuildContext context){//return Scaffold(//AppBar:AppBar(Title:Text(“Registration”)),//Body:Center(Child:Text(Widget.User.DisplayName)),