首页 > 解决方案 > 如果在关系中使用中介类,如何访问 Django 中的多对多字段?

问题描述

我是 django 的初学者。我已经尝试过几次来解决这个问题。如果问题没有正确提出,请考虑我的错误。

我不知道我哪里错了。

模型.py

class Participant(models.Model):
    user = models.OneToOneField(User,on_delete=models.CASCADE) 
    first_name = models.CharField(max_length=255,blank=True,null=True)
    last_name = models.CharField(max_length=255,blank=True,null=True)

class Assessment(models.Model):
    name = models.CharField(max_length=255) 
    slug = models.SlugField(blank=True)
    created = models.DateTimeField(auto_now_add=True,editable=False)
    modified = models.DateTimeField(auto_now=True)

class Seminar(models.Model):
    topic = models.CharField(max_length=255)
    date = models.DateField(null=True,blank=True)
    time = models.TimeField(null=True,blank=True)
    assessment = models.ManyToManyField(Assessment,blank=True,through='SeminarParticipant')
participant = models.ManyToManyField(Participant,blank=True,through='SeminarParticipant')
    created = models.DateTimeField(auto_now_add=True,editable=False)
    modified = models.DateTimeField(auto_now=True)


class SeminarParticipant(models.Model):
    assessment = models.ForeignKey(Assessment,blank=True,on_delete=models.CASCADE)
    seminar = models.ForeignKey(Seminar,blank=True,on_delete=models.CASCADE)
    participant = models.ForeignKey(Participant,blank=True,on_delete=models.CASCADE)
    request_time = models.PositiveIntegerField(default=0,validators=[MinValueValidator(0),])
    is_survey_completed = models.BooleanField(default=False)
    created = models.DateTimeField(auto_now_add=True,editable=False)
    modified = models.DateTimeField(auto_now=True)

也已经尝试弄清楚这一点:

django 基于类的列表视图中的多对多 select_related

如何在 Django 中访问基于类的视图中的多对多字段?

视图.py

class SeminarListView(ListView):
    template_name = 'show_seminar.html'
    model = Seminar
    context_object_name = 'seminar'

    def get_queryset(self): 
        queryset = Seminar.objects.prefetch_related('assessment_set').filter(participant__user=self.request.user).order_by('created')
        return queryset

show_seminar.html

<div class="row mt-5">
        {% for obj in seminar %}
            <div class="col-sm-6">
                <div class="card mt-2">
                    <div class="card-header">
                        <h4 class="text-center">{{obj.topic}}</h4>
                    </div>
                    <div class="card-body"> 
                        <a href="{%url 'seminar:question' 1 %}"><button>Go For Seminar</button></a>
                    </div>
                    <div class="card-footer">

                    </div>
                </div>      
            </div> 
        {% endfor %}
    </div>
    <div>
        {% for obj in seminar.seminarparticipant_set.all %}
            <p>{{obj}}</p>
        {% endfor %}
    </div>

我也想在 html 页面上显示评估。但只获取研讨会相关数据。在 obj.seminar.seminarparticipant_set.all 中。我越来越空白。

请帮忙!!

标签: pythondjango

解决方案


推荐阅读