как правильно отобразить поле многие ко многим в Django - PullRequest
1 голос
/ 05 мая 2019

Этот код сохраняет данные и отображает данные так, как я хотел. Но при отображении курсов он выглядит так: ,]> . Отображается с QuerySet []. Я хочу, чтобы отображалось только название курса. Как я могу это сделать

models.py

class Teacher(models.Model):
    name = models.CharField(max_length=50)
    address = models.CharField(max_length=50)
    phone = models.CharField(max_length=15)
    email = models.EmailField()
    image = models.ImageField(upload_to='Teachers',blank=True)
    courses = models.ManyToManyField(Course)

views.py

def viewteacher(request):
        teachers = Teacher.objects.all().order_by('-joined_date')
        year1 = datetime.datetime.today().year

        return render(request,'students/view_teacher.html',{'teachers':teachers,'year_list':range(2016,year1+1)})

шаблон

  {% for teacher in teachers %}
                <tr> 
                    <td>{{teacher.name}}</div></td>
                        <td>{{teacher.courses.all}}</td>
                        <td>{{teacher.address}}</td>
                        <td>{{teacher.phone}}</td>
                        <td><a href="{% url 'students:profile_teacher' teacher.id %}">Profile</a></td>
                        <td><a href="{% url 'students:edit_teacher' teacher.id %}">Edit</a></td>
                        <td><a href="{% url 'students:confirm_delete_teacher' teacher.id %}">Delete</a></td>
                    </tr>
                   {% endfor %}
                </tbody>

1 Ответ

1 голос
/ 05 мая 2019

A QuerySet отображается как <QuerySet [ ... ]>, так что вы можете выполнить итерацию по набору запросов и правильно отобразить его, например:

{% for teacher in teachers %}
<tr> 
    <td>{{teacher.name}}</div></td>
    <td><b>{% for course in teacher.courses %} {{course.name}} {% endfor %}</b></td>
    <td>{{teacher.address}}</td>
    <td>{{teacher.phone}}</td>
    <td><a href="{% url 'students:profile_teacher' teacher.id %}">Profile</a></td>
    <td><a href="{% url 'students:edit_teacher' teacher.id %}">Edit</a></td>
    <td><a href="{% url 'students:confirm_delete_teacher' teacher.id %}">Delete</a></td>
</tr>
{% endfor %}

Однако получить список курсов для каждого отдельного учителяочень эффективный.Вы можете использовать .prefetch_related для ускорения процесса.Затем он выполнит ограниченное количество запросов, чтобы выбрать все курсы и правильно связать их с нужным учителем (ами):

def viewteacher(request):
    teachers = Teacher.objects.<b>prefetch_related('courses')</b>.order_by('-joined_date')
    year1 = datetime.datetime.today().year

    return render(
        request,
        'students/view_teacher.html',
        {'teachers':teachers,'year_list':range(2016,year1+1)}
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...