/ / Джанго шаблон таблица форматиране - 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 %}