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,)