#python #django #django-models
Вопрос:
У меня есть две модели, а именно StudentInfo и StudentAdmission. student_id-это внешний ключ в модели приема студентов. Я хочу отобразить значения обеих моделей вместе в одной html-таблице. Как я мог это сделать?
models.py файл:
from django.db import models
from datetime import datetime
# Create your models here.
class StudentInfo(models.Model):
gender_choice = (
("male", "Male"),
("Female", "Female"),
)
firstname = models.CharField(max_length=100)
lastname = models.CharField(max_length=100)
gender = models.CharField(choices=gender_choice, max_length=10)
dob = models.DateField(default=datetime.now, blank=True)
address = models.CharField(max_length=100)
email = models.EmailField(max_length=100)
phone = models.CharField(max_length=100)
photo = models.ImageField(upload_to='photos/%Y/%m/%d/')
def __str__(self):
return self.firstname
class StudentAdmission(models.Model):
class_choice = (
("one", "one"),
("two", "two"),
("three", "three"),
)
section_choice = (
("A", "A"),
("B", "B"),
("C", "C"),
)
transport_choice1 = (
("abc", "abc"),
("bcd", "bcd"),
("def", "def"),
)
transport_choice2 = (
("ab", "ab"),
("bc", "bc"),
("de", "de"),
)
admission_no = models.CharField(max_length=100)
admission_date = models.DateField(default=datetime.now, blank=True)
roll_no = models.CharField(max_length=100)
email = models.EmailField(max_length=100)
username = models.CharField(max_length=100)
password = models.CharField(max_length=100)
class_name = models.CharField(choices=class_choice, max_length=10)
section_name = models.CharField(choices=section_choice, max_length=10)
transportation = models.CharField(choices=transport_choice1, max_length=10)
transport_vehicle = models.CharField(choices=transport_choice2, max_length=10)
student_name = models.ForeignKey(StudentInfo, on_delete=models.CASCADE)
def __str__(self):
return self.username
view.py:
def student_list(request):
students = StudentInfo.objects.all().order_by('-id')
data = {
"students": students,
}
return render(request, "students/student_list.html", data)
student_list.html
{% if students %}
{% for student in students %}
<tr>
<td>
#0021
</td>
<td class="text-center">
{% if student.photo %}
<img src="{{ student.photo.url }}" alt="student">
{% else %}
<img src="{% static 'img/default-pic.png' %}" alt="student">
{% endif %}
</td>
<td>{{student.firstname}}</td>
<td>{{student.gender}}</td>
<td>class name</td>
<td>section name</td>
<td>Jack Sparrow </td>
<td>{{student.address}}</td>
<td>{{student.dob}}</td>
<td>{{student.phone}}</td>
<td>{{student.email}}</td>
</tr>
{% endfor %}
{% endif %}
Я хочу отобразить связанные имена классов и разделов в следующей таблице
Комментарии:
1. добавьте свой вид или шаблон, покажите, что вы пробовали
2. @Blackranger Я добавил представление и шаблон, пожалуйста, проверьте это.
Ответ №1:
Вы можете получить доступ к связанному объекту через RELATED_MODEL_NAME_set
. Вот, например, это studentadmission_set
Или вы можете указать свое собственное имя, связанное с models.py
:
class StudentAdmission(models.Model):
...
student_name = models.ForeignKey(StudentInfo, on_delete=models.CASCADE, related_name="admissions")
После этого вы сможете получить доступ к связанной модели с этим значением
...
{% for admission in student.admissions.all %}
... Do sth
{% endfor %}
...
Комментарии:
1. Теперь я получаю следующую ошибку: объект ‘RelatedManager’ не может быть повторен
2. Прости! я отредактировал свой ответ. Обратите внимание, что у каждого студента есть несколько допусков, поэтому позаботьтесь о том, как вы хотите показать их в таблице @Rafiullah
3. Рад это слышать @Rafiullah