/ / एक गंदे टेम्पलेट टैग का उपयोग करने से बचना - मुझे यकीन है कि एक सरल समाधान है - django

एक गंदे टेम्पलेट टैग का उपयोग करने से बचें - मुझे यकीन है कि एक साधारण समाधान है - django

मैं यहाँ एक मानसिक ब्लॉक रहा हूँ।

मुझे अपना प्रोजेक्ट 90% काम कर रहा है, लेकिन एक गंदे कस्टम टेम्पलेट टैग का उपयोग किए बिना कुछ करने का सबसे अच्छा तरीका जानने की कोशिश कर रहा हूं।

मेरी 2 कक्षाएं हैं (डिफ़ॉल्ट django के अलावा User आदर्श)। Echo, और फिर Report. Report 2 विदेशी कुंजियाँ हैं: User, तथा Echo.

असल में, एक उपयोगकर्ता एक रिपोर्ट बना सकता हैखुद को संदर्भित करता है और एक प्रतिध्वनि भी। मैं जो करना चाहता हूं वह होम पेज पर जाता है और यह सभी इको (सूची ~ 15) को सूचीबद्ध करेगा, और फिर जो उन्होंने रिपोर्ट किया है।

जैसे यदि 15 ईकोस हैं, और उपयोगकर्ता ने ईकोस 3, 7, और 9 की सूचना दी है, तो 15 ईकोस की एक सूची होगी असूचित 3, 7 और 9 को छोड़कर, उन सभी के आगे, जहां यह "कहेंगे:" की सूचना दी.

अधिकतर यह किया जाता है। मैंने "का उपयोग करके एक दृश्य में इको की सूची बनाई है:

echos_list = Echo.objects.order_by("name")

और लॉग-इन उपयोगकर्ता के लिए रिपोर्ट की एक सूची:

user_reports = Report.objects.filter(user=request.user)

हालाँकि, टेम्पलेट में, मुझे कुछ ऐसा करने की आवश्यकता होगी

{% if user_reports.filter(echo=echo.name).count > 0 %}Complete{% else %}Incomplete{% endif %}

... लेकिन निश्चित रूप से मैं "ऐसा कर सकता हूं क्योंकि आप" टेम्पलेट्स में फ़िल्टर का उपयोग नहीं कर सकते हैं। आप मुझे क्या सलाह देंगे?

दृश्य:

from django.shortcuts import render_to_response, get_object_or_404, redirect
from dseapp.models import Echo,Report
from django.template import RequestContext
from django.contrib.auth import authenticate,login,logout
from django.contrib.auth.models import User
from django.contrib.auth.decorators import login_required

# Create your views here.

@login_required
def dse_index(request):
echos_list = Echo.objects.order_by("name")                  #We"ll use this to create the entire list of echos
user_reports = Report.objects.filter(user=request.user)     #We"ll use this to make a list of reports for the current user
return render_to_response("dseapp/dse.html", {"echos_list":echos_list,"user_reports":user_reports},context_instance=RequestContext(request))

टेम्पलेट:

<table>
<tr>
<th>Echo</th>
<th>Status</th>
</tr>
{% for echo in echos_list %}
<tr>
<td>{{echo.name}}</td>
<td><a href="/report/{{echo.name}}">
{% if user_reports.filter(echo=echo.name).count > 0 %}Complete{% else %}Incomplete{% endif %}
</a></td>
</tr>
{% endfor %}
</table>
<a href="/logout/">Logout</a>

मॉडल के:

from django.db import models
from django.contrib.auth.models import User

# Create your models here.

class Echo(models.Model):
name = models.CharField(max_length=200,blank=True)
image1_desc = models.CharField(max_length=200,blank=True)
image1_url = models.CharField(max_length=200,blank=True)
image2_desc = models.CharField(max_length=200,blank=True)
image2_url = models.CharField(max_length=200,blank=True)
image3_desc = models.CharField(max_length=200,blank=True)
image3_url = models.CharField(max_length=200,blank=True)
image4_desc = models.CharField(max_length=200,blank=True)
image4_url = models.CharField(max_length=200,blank=True)
hr_rest = models.IntegerField(blank=True,null=True)
hr_low = models.IntegerField(blank=True,null=True)
hr_high = models.IntegerField(blank=True,null=True)
lesion1_ffr = models.DecimalField(max_digits=4,decimal_places=2,blank=True,null=True)
lesion1_ifr = models.DecimalField(max_digits=4,decimal_places=2,blank=True,null=True)
lesion2_ffr = models.DecimalField(max_digits=4,decimal_places=2,blank=True,null=True)
lesion2_ifr = models.DecimalField(max_digits=4,decimal_places=2,blank=True,null=True)
lesion3_ffr = models.DecimalField(max_digits=4,decimal_places=2,blank=True,null=True)
lesion3_ifr = models.DecimalField(max_digits=4,decimal_places=2,blank=True,null=True)
lesion4_ffr = models.DecimalField(max_digits=4,decimal_places=2,blank=True,null=True)
lesion4_ifr = models.DecimalField(max_digits=4,decimal_places=2,blank=True,null=True)
lesion5_ffr = models.DecimalField(max_digits=4,decimal_places=2,blank=True,null=True)
lesion5_ifr = models.DecimalField(max_digits=4,decimal_places=2,blank=True,null=True)
def __unicode__(self):
return self.name

class Report(models.Model):
user = models.ForeignKey(User)
echo = models.ForeignKey(Echo)
answer_1 = models.IntegerField()
answer_2 = models.IntegerField()
answer_3 = models.IntegerField()
answer_4 = models.IntegerField()
answer_5 = models.IntegerField()
answer_6 = models.IntegerField()
answer_7 = models.IntegerField()
answer_8 = models.IntegerField()
answer_9 = models.IntegerField()
answer_10 = models.IntegerField()
answer_11 = models.IntegerField()
answer_12 = models.IntegerField()
answer_13 = models.IntegerField()
answer_14 = models.IntegerField()
answer_15 = models.IntegerField()
answer_16 = models.IntegerField()
answer_17 = models.IntegerField()
ischaemic = models.BooleanField()
confidence = models.IntegerField()
def __unicode__(self):
return self.user.__unicode__() + " / " + self.echo.__unicode__()

उत्तर:

उत्तर № 1 के लिए 1

आपको इसे देखने के लिए गणना करने की आवश्यकता है। echos_list प्रत्येक के लिए शब्दकोशों सहित एक सूची होनी चाहिए Echo, चाहे वह पूरा हो या न हो।

echos_list = []
for echo in Echo.objects.order_by("name"):
echos_list.append({
"object": echo,
"complete": user_reports.filter(echo=echo.name).count() > 0
}]

तब आप अपने टेम्प्लेट को अपडेट कर सकते हैं:

{% for echo in echos_list %}
<tr>
<td>{{echo.object.name}}</td>
<td><a href="/report/{{echo.object.name}}">
{% if echo.complete %}Complete{% else %}Incomplete{% endif %}
</a></td>
</tr>
{% endfor %}