我正在查询集:
def get_context_data(self, name, **kwargs):
context = super(ListDetailsOfTestSuite, self).get_context_data(**kwargs)
context['test_suite'] = TestSuite.objects.filter(name=name)
temp = TestSuite.objects.get(name=name)
context['test_cases'] = temp.test_cases.all()
return context
型号:
class TestCase(models.Model):
name = models.CharField(max_length=200)
documentation = models.CharField(max_length=2048, blank=True)
steps = models.CharField(max_length=2048, blank=True)
tags = models.CharField(max_length=200, blank=True)
setup = models.CharField(max_length=2048, blank=True)
teardown = models.CharField(max_length=2048, blank=True)
template = models.CharField(max_length=200, blank=True)
timeout = models.IntegerField(default=10)
def __str__(self):
return self.name
class TestSuite(models.Model):
name = models.CharField(max_length=200)
documentation = models.CharField(max_length=2048, blank=True)
setup = models.CharField(max_length=2048, blank=True)
teardown = models.CharField(max_length=2048, blank=True)
force_tags = models.CharField(max_length=200, blank=True)
timeout = models.IntegerField(default=10)
# user can have multiple test suites
user = models.ForeignKey(User, default=1, on_delete=models.CASCADE)
# Suite can contain a list of test cases but also a number of other test suites
test_cases = models.ManyToManyField(TestCase, through='SuiteCaseThroughModel')
def __str__(self):
return self.name
class Meta:
ordering = ('name',)
class SuiteCaseThroughModel(OrderedModel):
test_case = models.ForeignKey(TestCase, on_delete=models.CASCADE)
test_suite = models.ForeignKey(TestSuite, on_delete=models.CASCADE)
order_with_respect_to = 'test_suite'
但是,我什么也没得到,并且我确信问题出在过滤条件下,因为当我运行context['test_cases'] = TestCase.objects.all()
时,我得到了期望的结果。这个想法是从一个特定的测试套件中检索所有测试用例,因此我进行了一些研究:
temp = TestSuite.objects.get(name=name)
context['test_cases'] = temp.test_cases.all()
html:
<div class="row">
<div class="col-md-6">
{% for field in test_suite %}
{{ field.name }}
<ul>
<li><label>Documentation:</label> {{ field.documentation }}</li>
<li><label>Setup:</label> {{ field.setup }}</li>
<li><label>Teardown:</label> {{ field.teardown }}</li>
<li><label>Force Tags:</label> {{ field.force_tags }}</li>
<li><label>Timeout:</label> {{ field.timeout }}</li>
</ul>
</div>
{% endfor %}
<div class="col-md-6">
{% for field in test_cases %}
{{ field.name }}
<ul>
<li><label>Documentation:</label> {{ field.documentation }}</li>
<li><label>Setup:</label> {{ field.setup }}</li>
<li><label>Teardown:</label> {{ field.teardown }}</li>
<li><label>Tags:</label> {{ field.tags }}</li>
<li><label>Timeout:</label> {{ field.timeout }}</li>
</ul>
{% endfor %}
</div>
更新
def get_context_data(self, **kwargs):
context = super(ListDetailsOfTestSuite, self).get_context_data(**kwargs)
context['test_suite'] = TestSuite.objects.filter(name=kwargs['name']).prefetch_related('test_cases')
temp = TestSuite.objects.get(name=kwargs['name'])
context['test_cases'] = temp.test_cases.all()
return context
我在这里进行两个类似的查询,因为我需要在一页上呈现有关测试套件及其相关测试用例的信息。
尝试:
context['test_cases'] = TestCase.objects.filter(testsuite__name=kwargs['name'])
还有
context['test_cases'] = TestCase.objects.filter(suitecasethroughmodel__test_suite__name=kwargs['name'])
Django还支持从查询的另一端进行查找(或反向查找)。不过没有帮助,什么也没返回。 我目前有1个与测试套件相关的测试用例,应该应返回。
答案 0 :(得分:0)
如果您通过URL上的查询字符串通过了测试的Application.Run "'" & xlWb.Name & "'!Apps.Refresh_UserForm"
,则应该执行以下操作:
name
然后从您的from django.db.models import Prefetch
def get_context_data(self, name, **kwargs):
context = super(ListDetailsOfTestSuite, self).get_context_data(**kwargs)
context['test_suite'] = TestSuite.objects.filter(name=kwargs['name']).prefetch_related(
Prefetch('test_cases', queryset=TestSuite.objects.all())
)
return context
中访问test_suite
,这样就可以防止运行更多查询。
您可以通过以下方式访问test_cases
:
test_cases