Как получить контекстные данные для связанной модели с помощью ManyToManyFiled Relation в Django - PullRequest
0 голосов
/ 23 января 2020

У меня есть две модели: Учитель и Класс, как показано ниже. Где Class и Учитель связаны с ManyToManyField в поле class_instructor. Это означает, что в классе более одного учителя. Теперь я хотел показать всех учителей, которые принадлежат к этому конкретному экземпляру класса и в подробном представлении класса.

Моя модель учителя

class Teacher(models.Model):
    teachers_name = models.CharField(max_length=32,help_text="Enter a Teachers Name here")
    teachers_speciality = models.CharField(max_length=32,help_text="Enter a Teachers Speciality.e.g. Drawing Instructor")
    teachers_description = models.TextField(max_length=1200,help_text="Enter a Teachers Description")
    teachers_image = models.ImageField(blank=True, null=True)


    def __str__(self):
        return self.teachers_name

Моя модель класса

class Class(models.Model):
    class_name = models.CharField(max_length=120,help_text="Enter the class Name here")
    class_duration = models.CharField(max_length=30,help_text="Enter class duration",default='1 Year')
    class_instructor = models.ManyToManyField(Teacher)
    available_seats = models.PositiveIntegerField(default=30)
    class_description = models.TextField(max_length=500,blank=True,null=True)
    course_description = models.TextField(max_length=2500,blank=True,null=True)
    course_type = models.CharField(max_length=20,help_text="Enter the course type here,e.g. Basic")
    class_iamge = models.ImageField(blank=True, null=True)
    class_iamge_detail = models.ImageField(blank=True, null=True)
    class_added_at = models.DateField(auto_now=False)
    student_ages = models.IntegerField()
    tution_fee = models.IntegerField(blank=True, null=True)



    def __str__(self):
        return self.class_name

    def get_absolute_url(self):
        return reverse("class_detail", kwargs={"pk": self.pk})

Я пробовал следующий способ, например, используя get_context_data, где я пытался отфильтровать свою модель учителя с соответствующими ПК класса подробно. Но не в состоянии понять, что работает. Вместо этого я показал всех учителей на странице сведений о классе, но я хотел показать учителей, которые связывали только текущий класс в представлениях сведений о классе.

Представления сведений о моем классе

class ClassDetailView(DetailView): ## this context will bring the Class corrospondint to that pk
    model = Class
    template_name = 'home/class_detail.html'
    context_object_name = 'class'



    def get_context_data(self,**kwargs):
        # this context will bring the Class corrospondnt to that pk
        context = super(ClassDetailView,self).get_context_data(**kwargs)
        context['teachers'] = Teacher.objects.all()
        print(context)
        return context

В моих шаблонах я пытаюсь показать как показано ниже .......

{% for teacher in teachers %}
<div class="teacher">
    <img src="{% static 'images/team/teacher/1.jpg' %}" alt="teacher">
    <h2>{{teacher.teachers_name}}</h2>
    <span>{{teacher.teachers_speciality}}</span>
    <p>{{teacher.teachers_description}}</p>
</div>
{% endfor %}

1 Ответ

0 голосов
/ 23 января 2020

Вы можете написать фильтр учителя следующим образом,

class_id = 10 # Your class details id may be
context['teachers'] = Teacher.objects.filter(class_set__id=class_id)
...