Как получить доступ к атрибуту свойства модели Django с помощью фильтра набора запросов в представлениях Django?

#python #django #django-models #django-views

Вопрос:

У меня есть модель:

 class IpdReport(models.Model):
    patient=models.ForeignKey(Patient, on_delete=CASCADE)
    package=models.ForeignKey(Package, on_delete=CASCADE)
 

Patient Модель выглядит так:

 class Patient(models.Model):
    name=models.CharField(max_length=100)
    mr_uid=models.CharField(max_length=9) #A gender field needs to be added here later

    @property
    def patient_number(self):
        if self.pk:
            return "{}{:04d}".format('PN/D/', self.pk)
        else:
            return ""

    def __str__(self):
        return self.name "-" self.patient_number
 

Теперь я хочу отфильтровать данные IpdReport to в views функции для отображения таблицы на основе property атрибута Patient модели, то есть patient_number .

Вот что я попробовал, но это не сработало:

 def sort_by_pt(request):
    if request.method=='POST':
        pn=request.POST.get('enter_patient_number')
        report=IpdReport.objects.filter(patient__patient_number=pn)
        total1=report.aggregate(Sum('realization__amount_received'))
        total2=report.aggregate(Sum('realization__deficit_or_surplus_amount'))
        context={'report': report, 'total1':total1, 'total2':total2}
        return render(request, 'account/ipdreport.html', context)
    else:
        sort=EnterPatientNumber()
        return render(request, 'account/sort.html', {'sort':sort})
 

Ошибка, которую он выдал: В связанном поле неверный поиск: patient_number

Каковы мои возможности для этого?

Комментарии:

1. Просто извлеките pk из опубликованных данных и отфильтруйте с помощью этого… Вы не можете ссылаться на свойства в запросе, но вы можете включить их логику в запрос.

2. Но разве нет никакого способа достичь того, чего я хочу? Типа, вообще?

3. Ваша собственность просто имеет форму PN/D/{pk} . Зачем все усложнять и писать какой-то сложный запрос? Просто извлеките значение pk из строки (не сложно) и отфильтруйте его…

4. Видите ли, дело в том, что у больницы есть четыре отделения в четырех разных городах, буква D в PN/D/{pk} является инициалом одного из этих городов. Для другого города это будет PN/S/{pk} и так далее. Глядя на это с точки зрения отрасли, ваше предложение действительно работает хорошо, но я собираюсь получить все данные из всех центров для составления финансовых отчетов на макроуровне, в то время как я не смогу различать номера пациентов, которые принадлежат какому центру, мне нужно иметь возможность полностью просмотреть номер пациента, чтобы получить правильные данные. Даже сложные решения будут работать, если они у вас есть!

5. Ваш пк автоматически увеличивается, не так ли? Продолжай в том же духе. Просто добавьте отдельное поле, в котором будет храниться только город (или инициал города). Нет необходимости хранить две разные вещи в одном столбце, так как они разные, они должны быть в отдельных столбцах.