Django: Фильтрация записей одной модели, чтобы показать все записи другой модели - PullRequest
0 голосов
/ 04 октября 2019

Я пытаюсь отфильтровать все предметы из моих модельных предметов, а затем показать все оценки по этому предмету из моих других модельных оценок для конкретного сотрудника, который также является моделью.

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

Тематическая модель

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)

Оценочная модель

class Evaluation(models.Model):
   id = models.AutoField(primary_key=True)
   employee_num = models.ForeignKey('Employee', on_delete=models.CASCADE, null=True)
   subjectname = models.ForeignKey('Subject', on_delete=models.CASCADE, null=True)

Модель сотрудника

class Employee(models.Model):
   id = models.AutoField(primary_key=True)
   slug = models.SlugField(max_length=200)
   employee_num = 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.")
   subjectname = models.ForeignKey('Subject', on_delete=models.CASCADE, null=True)

Просмотр темы сотрудника

class EmployeeDetailView(DetailView):
    template_name = 'evalsys/employee/alle_employees_eval.html'
    model = Employee

    # Uses employee PK to make a detail view
    def view_employee_with_pk(self, pk=None):
        if pk:
            employee = Employee.objects.get(pk=pk)
        else:
            employee = self.employee
        args = {'employee': employee, }
        return render(self, 'evalsys/employee/alle_employees_eval.html', args)

    def get_context_data(self, **kwargs):
        context = super(EmployeeDetailViewDetailView, self).get_context_data(**kwargs)
        context['evaluation'] = Evaluering.objects.all()
        context['subject_list'] = Subject.objects.all()
        context['eval_list'] = Evaluering.objects.all().filter(ma=self.object)
        return context

Шаблон

Так что в моем шаблоне у меня будет что-то вроде:

{% for subject in subject_list %}
    <a href="">{{ subject.subjectname }}</a>
{% endfor %}

С этого момента я действительно не знаю, как фильтровать вещи. Надеюсь, это имеет смысл, я перевел и вырезал ненужную информацию из кода, так что просто спросите, если что-то не имеет смысла.

1 Ответ

0 голосов
/ 04 октября 2019

Вы можете получить оценки, связанные с темой в шаблоне, выполнив следующее:

{% for subject in subject_list %}
    <a href="">{{ subject.subjectname }}</a>
    {% for evaluation in subject.evaluation_set.all %}
        <span>{{ evaluation }}</span>
    {% endfor %}
{% endfor %}

Вы можете сделать нечто подобное для любых других внешних ключей.

...