Как получить доступ к полям ManyToMany в Django, если в отношении используется класс-посредник? - PullRequest
0 голосов
/ 10 июля 2019

Я новичок в Джанго.Я уже несколько раз пытался решить эту проблему.Пожалуйста, примите во внимание мою ошибку, если вопрос не задан правильно.

Я не знаю, где я иду не так.

models.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)

Уже пытайтесь понятьэто тоже:

многие ко многим select_related в представлении списка на основе классов django

Как получить доступ ко многим многим полям в представлениях на основе классов вDjango?

views.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.Я становлюсь пустым.

Пожалуйста, помогите !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...