我正在开发一个Django网络应用,并有以下查询:
我有一个名为'AppQoSList'的模型,它列出了所有用户都可以使用的应用程序。
我有另一个名为'BasicAppSDWANProfiles'的模型,它与'AppQoSList'有一个ManyToMany关系。
简而言之,这意味着用户可以将多个“BasicAppSDWANProfiles”与其帐户相关联,并且多个AppQoS可以位于特定的BasicAppSDWANProfiles中:
class AppQoSList(models.Model):
app_qos_name = models.CharField(max_length=50, blank=None, null=True)
app_qos_description = models.CharField(max_length=500)
def __str__(self):
return u'%s' % self.app_qos_name
class BasicAppSDWANProfiles(models.Model):
profile_name = models.CharField(max_length=30)
profile_basic_app_qos = models.ManyToManyField(AppQoSList)
tenant_id = models.ForeignKey(Tenant, default=3)
当我尝试显示可用的应用列表和相关的BasicAppSDWANProfile时,我在模板中遇到问题:
{% for app in apps %}
{% for profile_app in sdwan_prof %}
{% for specific_app in profile_app.profile_basic_app_qos.all %}
{% ifchanged specific_app.pk %}
{% if app.pk == specific_app.pk %}
<td><h4><span class="label label-primary">{{ profile_app.profile_name }}</span></h4></td>
{% else %}
<td><h4><span class="label label-warning">Not Assigned</span></h4></td>
{% endif %}
{% endifchanged %}
{% endfor %}
{% endfor %}
{% endfor %}
此代码的问题是每行显示“未分配”6次(对应于与此用户关联的BasicAppSDWANProfiles中找到的应用程序数),而我只想显示一次:
你能解决这个问题吗?
提前致谢。
答案 0 :(得分:0)
我能够解决这个问题。
首先,我清理了我的观看代码,以删除重复的“未分配”#39;值。
我向我的模板上下文传递一个字典,其中只包含分配了个人资料的应用,如下所示:
{'citrix-static': 'DPS-BLACKLIST',
'exchange': 'DPS-BLACKLIST',
'ms-lync-audio': 'DPS-WHITELIST',
'ms-update': 'DPS-GREYLIST',
'rtp': 'DPS-WHITELIST',
'share-point': 'DPS-WHITELIST'}
在我的模板中,我只遍历这个词典:
{% for k,v in app_prof_assign.items %}
{% if app.app_qos_name == k %}
<td><h4><span class="label label-primary">{{ v }}</span></h4></td>
{% endif %}
{% endfor %}
然后,我只是检查应用程序是否不在个人资料词典中,在循环之外:
{% if app.app_qos_name not in app_prof_assign %}
<td><h4><span class="label label-warning">Not Assigned</span></h4></td>
{% endif %}
最后,我可以按预期填充表格: