/ / Django टेम्पलेट टेबल स्वरूपण - django

Django टेम्पलेट टेबल स्वरूपण - django

मैं एक छात्र परीक्षा परिणाम टेम्पलेट का निर्माण कर रहा हूँ लेकिनमुझे कोई समस्या है वर्तमान में मैंने अपने टेस्ट मॉडल में 2 परीक्षण (गणित और वर्तनी) बनाए हैं। समस्या यह है कि, यदि मैं पहले किसी छात्र के लिए दूसरे टेस्ट (स्पेलिंग) के लिए डेटा (स्कोर) दर्ज करता हूं, तो स्कोर को टेम्पलेट में गलत तरीके से रखा जाता है - स्कोर गणित कॉलम में रखा जाता है, न कि वर्तनी कॉलम। जैसे ही मैं गणित परीक्षण में उसी छात्र का नाम दर्ज करता हूं, यह वर्तनी कॉलम में सही / स्थानांतरित हो जाता है। यह एक मामूली मुद्दा है, लेकिन परिणाम अभी भी गलत जगह पर रखा जा रहा है और मुझे नहीं पता कि क्यों।

मुझसे कुछ गलत हो रहा होगा। मुझे लगता है कि मुझे लगता है कि कुछ प्रकार के फ़िल्टरिंग याद आ रही है। उम्मीद है कि नीचे दिया गया कोड इसे और समझाने में मदद करेगा। धन्यवाद।

    class Student(models.Model):
first = models.CharField(max_length=100)
last = models.CharField(max_length=100)
gender = models.CharField(max_length=1)
teacher = models.ForeignKey(Teacher)

def __unicode__(self):
return "%s %s" % (self.first, self.last)


class Test(models.Model):
name = models.CharField(max_length=100)
Out_of = models.IntegerField(null=True, blank=True)

def __unicode__(self):
return self.name

class Meta:
ordering = ["name"]



class Display(models.Model):
name = models.ForeignKey(Student, related_name="art")
test = models.ForeignKey(Test)
one = models.IntegerField(null=True, blank=True)
two = models.IntegerField(null=True, blank=True)
three = models.IntegerField(null=True, blank=True)

# views.py
def test(request):

return list_detail.object_list(
request,
queryset = Student.objects.all(),
template_name = "display.html",
template_object_name = "results",

# display.html

<table>

<tr>
<th>First</th>
<th>Name</th>
<th>Maths</th>
<th>Spelling</th>
</tr>
{% for item in results_list %}

<tr>
<td> {{ item.first }} </td>
<td> {{ item.last }} </td>

{% for x in item.art.all %}
<td> {{ x.one }} </td>

{% endfor %}

{% endfor %}
</tr>

</table>

# admin.py
class StudentInline(admin.TabularInline):
model = Display


class TestAdmin(admin.ModelAdmin):
inlines = [StudentInline]

उत्तर:

जवाब के लिए 0 № 1

समस्या यह है कि आपको किसी भी तरह से आदेश देने की आवश्यकता है item.art.all() उसी क्रम में आपके टेबल कॉलम (यानी। गणित संख्या और फिर वर्तनी)। परीक्षण परिणामों में से केवल एक जोड़ा जाने पर मामलों को संभालने की भी आवश्यकता है। लेकिन इसे प्राप्त करने का सीधा रास्ता नहीं है, आपके पास विदेशी कुंजी (या रिश्ते) सदस्य नहीं हो सकता है ordering में Meta कक्षा।

तो आपके पास एक विधि हो सकती है Display पसंदीदा क्रम में सूची वापस करने के लिए मॉडल और इसे टेम्पलेट से कॉल करें।

नीचे नमूना समाधान:

class Student(models.Model):
first = models.CharField(max_length=100)
last = models.CharField(max_length=100)
gender = models.CharField(max_length=1)
teacher = models.ForeignKey(Teacher)
def __unicode__(self):
return "%s %s" % (self.first, self.last)

#this would return in order as math, spelling
def get_result_list_in_order(self):
rlist = []
for tname in ["math", "spelling"]:
rtest = self.art.filter(test__name__iexact=tname)
if rtest:
rlist.append(rtest[0])  #add the first entry from filtered queryset
# or do
#rlist.extend(rtest)
else
rlist.append(None)

return rlist

तो आप टेम्पलेट में क्या कर सकते हैं

{% for x in item.get_result_list_in_order %}
<td> {{x.one}} </td>
{% endfor %}