Django / jQuery级联管理中的选择框

劳尔

我有一个Contract类,其中contract_mod允许从上一个合同扩展合同。contract_mod应该仅显示与我们之前选择的人相关的合同。Contract类返回现场人员由于我从未使用过AJAX / jQuery,所以我不知道从哪里开始。

因此,我的目标是字段contract_mod依赖于此字段人员(使用Admin界面)。

class Contract(models.Model):
    person        = models.ForeignKey(Person) #person hired
    contract_mod  = models.OneToOneField('self', blank = True, null = True) #allows to extend a contract
        ...

由于字段contract_mod是OneToOneField,因此我无法使用django-smart-selects或django-ajax-select

布雷特

在类似的情况下,我执行了以下操作(现已适应您的模型):

楷模

class Person(models.Model):
    name = models.CharField(max_length=20)
    def __unicode__(self):
        return self.name
    def get_name(self):
        return self.name

class Contract(models.Model):
    person        = models.ForeignKey(Person) #person hired
    contract_mod  = models.OneToOneField('self', blank = True, null = True)
    contract_name = models.CharField(max_length=20) #just for testing

    def __unicode__(self):
        return self.get_name() + " " +self.contract_name
    def get_name(self):
        return self.person.get_name() #to make sure you get the person name in the admin
    def contract_mod_name(self):
        if self.contract_mod:
            return self.contract_mod.contract_name
        else:
            return ""

行政

class SelectField(forms.ChoiceField):
    def clean(self, value):
        return value

class CForm(forms.ModelForm):
    contracts_from_selected = SelectField()
    class Meta:
        model = Contract
        widgets = { 'contract_mod' : forms.widgets.Select(attrs={'hidden' : 'true'}) }

class CAdmin(admin.ModelAdmin):
    form = CForm
    list_display = ('contract_name','get_name','contract_mod_name')#what you like
    def save_model(self, request, obj, form, change):
        if request.POST.get('contracts_from_selected'):
            obj.contract_mod=Contract.objects.get(id=int(request.POST.get('contracts_from_selected')))

        obj.save()

覆盖change_form.html模板(通过将其从django / contrib / admin / templates / admin复制到yourapp / templates / admin / yourapp目录中)并添加以下Javascript:

$(function () {
    $("#id_person").change(function () {    
        var options = $("#id_contract_mod option").filter(function () {
            return $(this).html().split(" ")[0] === $("#id_person   option:selected").html();
        }).clone();
        $("#id_contracts_from_selected").empty();
        $("#id_contracts_from_selected").append(options);
    });
});

一个缺点是,它使用可见的html条目存储人与合同之间的关系。因此,该人在下拉菜单中也可见。为避免这种情况,您可以在选项中添加属性-参见此处:Django表单字段选择,添加属性

是的,最好完全隐藏contract_mod ChoiceField。通过小部件中的hidden = True,仅下拉列表被隐藏。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

限制出现在Django管理员选择框中的值

来自分类Dev

Django管理表单字段-在选择框中显示与对象无关的查询结果

来自分类Dev

Django模型中的复杂级联

来自分类Dev

Django:如何级联在不同抽象类中定义的自定义管理器?

来自分类Dev

Django中Mongodb中的级联更改

来自分类Dev

在Django中管理继承

来自分类Dev

Django管理中的MultiValueDictKeyError

来自分类Dev

Django中的会员管理

来自分类Dev

将选择框呈现为 Django Admin 中的单选按钮

来自分类Dev

Django 管理员重置搜索框查询过滤器选择

来自分类Dev

django中的计数选择

来自分类Dev

Django-CMS:django 管理中的 PlaceholderField

来自分类Dev

Django管理表单自定义选择

来自分类Dev

Django管理中的覆盖模板

来自分类Dev

将jQuery添加到Django管理页面以选择下拉菜单以启用/禁用它

来自分类Dev

django 模板 <select> 框未选择值

来自分类Dev

在django 2.2中的html模板中的选择框中显示项目列表

来自分类Dev

如何将管理表单集中的外键选择限制为仅在 django 中的相关对象

来自分类Dev

Django管理员-内联数据库中的选择

来自分类Dev

如何将侦听器附加到 Django 管理中的日期选择?

来自分类Dev

如何在django- category子类别的管理面板中获取动态选择字段

来自分类Dev

Django中的子查询结果未从下拉选择框中循环

来自分类Dev

如何根据Django管理员中另一个选择标签的选项更改选择标签选项?

来自分类Dev

Django Admin,修改/自定义manytomany字段的选择框中的名称

来自分类Dev

如何从django管理界面更改django中的模型名称?

来自分类Dev

Django管理员:在django中获取登录的用户ID

来自分类Dev

Django:在Django管理中扩展base.html

来自分类Dev

管理 Django Rest Framework (DRF) 中的 Python/Django 'OperationalError'

来自分类Dev

Django管理面板中特定字段的权限

Related 相关文章

  1. 1

    限制出现在Django管理员选择框中的值

  2. 2

    Django管理表单字段-在选择框中显示与对象无关的查询结果

  3. 3

    Django模型中的复杂级联

  4. 4

    Django:如何级联在不同抽象类中定义的自定义管理器?

  5. 5

    Django中Mongodb中的级联更改

  6. 6

    在Django中管理继承

  7. 7

    Django管理中的MultiValueDictKeyError

  8. 8

    Django中的会员管理

  9. 9

    将选择框呈现为 Django Admin 中的单选按钮

  10. 10

    Django 管理员重置搜索框查询过滤器选择

  11. 11

    django中的计数选择

  12. 12

    Django-CMS:django 管理中的 PlaceholderField

  13. 13

    Django管理表单自定义选择

  14. 14

    Django管理中的覆盖模板

  15. 15

    将jQuery添加到Django管理页面以选择下拉菜单以启用/禁用它

  16. 16

    django 模板 <select> 框未选择值

  17. 17

    在django 2.2中的html模板中的选择框中显示项目列表

  18. 18

    如何将管理表单集中的外键选择限制为仅在 django 中的相关对象

  19. 19

    Django管理员-内联数据库中的选择

  20. 20

    如何将侦听器附加到 Django 管理中的日期选择?

  21. 21

    如何在django- category子类别的管理面板中获取动态选择字段

  22. 22

    Django中的子查询结果未从下拉选择框中循环

  23. 23

    如何根据Django管理员中另一个选择标签的选项更改选择标签选项?

  24. 24

    Django Admin,修改/自定义manytomany字段的选择框中的名称

  25. 25

    如何从django管理界面更改django中的模型名称?

  26. 26

    Django管理员:在django中获取登录的用户ID

  27. 27

    Django:在Django管理中扩展base.html

  28. 28

    管理 Django Rest Framework (DRF) 中的 Python/Django 'OperationalError'

  29. 29

    Django管理面板中特定字段的权限

热门标签

归档