Python 编辑表单内另一个模型的Django管理过滤器

Python 编辑表单内另一个模型的Django管理过滤器,python,django,django-admin,django-admin-filters,Python,Django,Django Admin,Django Admin Filters,我面临以下问题 我有3种不同的型号: 1.)Testsuite(包含测试列表) 2.)测试(有不同的组,如“生产”、“现场”、“前端”、“后端”等) 3.)组(所有可用组的列表 测试人员需要创建一个包含测试列表的测试套件。 但逐个添加它们并不合适。 更好的选择是按组批量添加它们 我正在寻找2个解决方案。 在编辑表单中包含过滤器选项 这里的过滤器会很好 或者其他选择 编辑表单中的水平列表 能够搜索组标记 一些代码可以更好地理解。 在forms.py中: <pre> class Te

我面临以下问题
我有3种不同的型号:
1.)Testsuite(包含测试列表)
2.)测试(有不同的组,如“生产”、“现场”、“前端”、“后端”等)
3.)组(所有可用组的列表

测试人员需要创建一个包含测试列表的测试套件。 但逐个添加它们并不合适。 更好的选择是按组批量添加它们

我正在寻找2个解决方案。 在编辑表单中包含过滤器选项

这里的过滤器会很好

或者其他选择

编辑表单中的水平列表 能够搜索组标记

一些代码可以更好地理解。 在forms.py中:

<pre>
class TestSuiteForm(forms.ModelForm):
    class Meta:
        model = TestSuiteModel
        fields = ('name','testcases' , 'nutzer' )
        widgets = {
            'testcases': autocomplete.ModelSelect2Multiple(
                'Testcase_autocomplete'
            )
        }

class TestCaseForm(forms.ModelForm):
    class Meta:
        model = TestCaseModel
        fields = ('name',  'testsuite' , 'gruppen' , 'portal' )
        widgets = {
            'testsuite': autocomplete.ModelSelect2Multiple(
                'Testsuite_autocomplete'
            ),

            'gruppen': autocomplete.ModelSelect2Multiple(
                'Gruppen_autocomplete'
            ),

        }


class GroupForm(forms.ModelForm):
    class Meta:
        model = GroupModel
        fields = ('name', 'testcases' )
        widgets = {
            'testcases': autocomplete.ModelSelect2Multiple(
                'Testcase_autocomplete'
            )
        }
</pre>
<pre>

class TestCaseModel(models.Model):
    #id = models.CharField(primary_key=True, max_length=50)
    name = models.CharField(max_length=50)
    gruppen =  models.ManyToManyField('GroupModel' , blank=True)
    testsuite = models.ManyToManyField('TestSuiteModel' , blank=True)

    def __str__(self):
        return self.name

    class Meta:
        db_table = "Testcase"
        verbose_name = 'Testcase'
        verbose_name_plural = 'Testcases'

@python_2_unicode_compatible
class TestSuiteModel(models.Model):
    name = models.CharField(max_length=200)
    testcases = models.ManyToManyField('TestCaseModel' , blank=True)
    nutzer = models.CharField(max_length=200,  blank=True)

    def __str__(self):
        return self.name

    class Meta:
        db_table = "Testsuite"
        verbose_name = 'Testsuite'
        verbose_name_plural = 'Testsuits'

class GroupModel(models.Model):
    name = models.CharField(max_length=50)
    testcases = models.ManyToManyField('TestCaseModel',  blank=True)


    def __str__(self):
        return self.name
</pre>

类TestSuiteForm(forms.ModelForm):
类元:
model=TestSuiteModel
字段=('name'、'testcases'、'nutzer')
小部件={
“测试用例”:autocomplete.ModelSelect2Multiple(
“Testcase\u自动完成”
)
}
类TestCaseForm(forms.ModelForm):
类元:
model=TestCaseModel
字段=('name','testsuite','gruppen','portal')
小部件={
“testsuite”:autocomplete.ModelSelect2Multiple(
“Testsuite\u自动完成”
),
“gruppen”:autocomplete.ModelSelect2Multiple(
“Gruppen_autocomplete”
),
}
类GroupForm(forms.ModelForm):
类元:
模型=组模型
字段=('name','testcases')
小部件={
“测试用例”:autocomplete.ModelSelect2Multiple(
“Testcase\u自动完成”
)
}
管理员


类TestSuiteFormAdmin(admin.ModelAdmin):
搜索_字段=('name',)
form=TestSuiteForm
列表过滤器=['name']
类TestCaseAdmin(admin.ModelAdmin):
form=TestCaseForm
列表过滤器=['gruppen',]
列表显示=['name',]
搜索_字段=('name',)
类GroupAdmin(admin.ModelAdmin):
表单=组表单
列表过滤器=['name']
和models.py


类TestCaseModel(models.Model):
#id=models.CharField(主键=True,最大长度=50)
name=models.CharField(最大长度=50)
gruppen=models.ManyToManyField('GroupModel',blank=True)
testsuite=models.ManyToManyField('TestSuiteModel',blank=True)
定义(自我):
返回self.name
类元:
db_table=“Testcase”
详细名称='Testcase'
详细名称复数='Testcases'
@python_2_unicode_兼容
类TestSuiteModel(models.Model):
name=models.CharField(最大长度=200)
testcases=models.ManyToManyField('TestCaseModel',blank=True)
nutzer=models.CharField(最大长度=200,空白=True)
定义(自我):
返回self.name
类元:
db_table=“Testsuite”
详细名称='Testsuite'
详细名称复数='Testsuits'
类GroupModel(models.Model):
name=models.CharField(最大长度=50)
testcases=models.ManyToManyField('TestCaseModel',blank=True)
定义(自我):
返回self.name

这是我找到的一个解决方案。但这不适用于多对多字段

对于多对多关系,您将获得一个none值,并且无法对其进行筛选

<pre>

class TestCaseModel(models.Model):
    #id = models.CharField(primary_key=True, max_length=50)
    name = models.CharField(max_length=50)
    gruppen =  models.ManyToManyField('GroupModel' , blank=True)
    testsuite = models.ManyToManyField('TestSuiteModel' , blank=True)

    def __str__(self):
        return self.name

    class Meta:
        db_table = "Testcase"
        verbose_name = 'Testcase'
        verbose_name_plural = 'Testcases'

@python_2_unicode_compatible
class TestSuiteModel(models.Model):
    name = models.CharField(max_length=200)
    testcases = models.ManyToManyField('TestCaseModel' , blank=True)
    nutzer = models.CharField(max_length=200,  blank=True)

    def __str__(self):
        return self.name

    class Meta:
        db_table = "Testsuite"
        verbose_name = 'Testsuite'
        verbose_name_plural = 'Testsuits'

class GroupModel(models.Model):
    name = models.CharField(max_length=50)
    testcases = models.ManyToManyField('TestCaseModel',  blank=True)


    def __str__(self):
        return self.name
</pre>
from pprint import pprint
from django.utils.encoding import smart_text
from django.utils.translation import ugettext_lazy as _

class CategoryListFilter(admin.SimpleListFilter):
title = _('TestCaseModel')
parameter_name = 'testcasemodel'

def lookups(self, request, model_admin):
    categories = TestCaseModel.objects.all()

    for obj in categories:
        pprint(vars(obj))
    #filter_objects = TestCaseModel.objects.filter(Some_attribut = "some_name")
    #filter_objects = TestCaseModel.objects.filter(group = "backend")

def queryset(self, request, queryset):

    if self.value():
        return queryset.filter(testcasemodel__id=self.value())

class TAdmin(admin.ModelAdmin):      
    list_filter = (CategoryListFilter,)