Я пытаюсь создать подробный вид, в котором я использую сотрудник и имя субъекта , чтобы показать оценки , созданные в конкретной теме.
В настоящее время у меня есть эта деталь, где, где я перебираю имена субъектов и показываю все оценки для субъекта для сотрудника. Представление использует сотрудника в качестве первичного ключа.
Поэтому, когда я нажимаю на имя субъекта из цикла ниже, я хочу перейти к новому представлению, где я показываю оценки для предмета конкретным сотрудником.
Шаблон сотрудника
{% for subject in subject_list %}
<a href="{% url 'evalsys:fag_evaluering_detail' employee.pk subject.pk %}"><h5>{{ subject.subjectname }}</h5></a>
{% for evaluation in subject.evaluation_set.all %}
{{ evaluation.instructor }}
{{ evaluation.ma }}
{% endfor %}
{% endfor %}
Я не могу понять, какой лучший способ сделать это. Я считаю, что использование первичного ключа сотрудника для нового представления является правильным, но как мне «перенести» идентификатор субъекта из цикла в следующее представление?
В качестве альтернативы я могу использовать идентификатор субъекта для представления, но тогда я не понимаю, как «перенести» сотрудника поверх.
Вид сотрудника с предметами
class EmployeeEvalDetailView(DetailView):
template_name = 'evalsys/evalueringer/se_alle_evalueringer.html'
model = Employee
def get_context_data(self, **kwargs):
context = super(EmployeeEvalDetailView, self).get_context_data(**kwargs)
context['fagene'] = Subject.objects.all().prefetch_related(Prefetch('evaluation_set', queryset=Evaluation.objects.filter(ma=self.object)))
return context
Модель сотрудника
class Medarbejder(models.Model):
id = models.AutoField(primary_key=True)
slug = models.SlugField(max_length=200)
ma = models.IntegerField(help_text="Indtast medarbejderens MA-nummer. (F.eks 123456)")
firstname = models.CharField(max_length=30, help_text="Indtast medarbejderens fornavn.")
lastname = models.CharField(max_length=30, help_text="Indtast medarbejderens efternavn.")
subject = models.ManyToManyField('Subject', related_name='medarbejder', through='Evaluering')
Модель оценки
class Evaluering(models.Model):
id = models.AutoField(primary_key=True)
oprettet = models.DateTimeField(auto_now_add=True)
opdateret = models.DateField(auto_now=True)
ma = models.ForeignKey('Employee', on_delete=models.CASCADE, null=True)
subjectname = models.ForeignKey('Subject', on_delete=models.CASCADE, null=True)
instructor = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
Модель объекта
class Subject(models.Model):
id = models.AutoField(primary_key=True)
subjectname = models.CharField(max_length=255, help_text="Indtast navnet på faget.")
slug = models.SlugField(max_length=200, unique=True)
Новый подробный вид с несколькими PK
class FagEvalDetailView(DetailView):
model = Employee
template_name = 'evalsys/evalueringer/eksporter/detail_fag_eval.html'
def get_context_data(self, **kwargs):
context = super(FagEvalDetailView, self).get_context_data()
context['pk_alt'] = Subject.objects.get(id=self.kwargs.get('pk_alt', ''))
return context