Django: перевод двух первичных ключей в новый подробный вид - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь создать подробный вид, в котором я использую сотрудник и имя субъекта , чтобы показать оценки , созданные в конкретной теме.

В настоящее время у меня есть эта деталь, где, где я перебираю имена субъектов и показываю все оценки для субъекта для сотрудника. Представление использует сотрудника в качестве первичного ключа.

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

Шаблон сотрудника

{% 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
...