Как получить закрытый ключ объекта (из views.py), в DetailView которого мы находимся? - PullRequest
0 голосов
/ 05 мая 2020

У меня 2 модели: Пациент и Местоположение. Локации связаны с пациентами 1 к 1. Когда пользователь входит в PatientDetailView для определенного пациента c, он может запрашивать местоположения с одинаковыми именами между пациентами. Пользователь выбирает место запроса из раскрывающегося меню.

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

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

queryset=Location.objects.all().order_by('location_name')

Просмотр

def profile_search(request,pk):
    if request.method == 'POST':
        query_form = QueryForm(request.POST)
        if query_form.is_valid():
            model=Location

            location = query_form.cleaned_data['location']
            location_str = str(location).split(',')[0]
            period = query_form.cleaned_data['period']


            entry_list = list(Location.objects.all())
            return_dict = {}


            for i in range(len(entry_list)):
                if location_str == entry_list[i].location_name and \ 
                   location.patient.idn != entry_list[i].patient.idn:

                    print('match')

            return render(request, 'covidapp/query_page.html',{'return_dict':return_dict, 'query_form':query_form})

    else:
        query_form = QueryForm()

    return render(request, 'covidapp/query_page.html',{'query_form':query_form})

Форма:

class QueryForm(forms.Form):
    period = forms.IntegerField()
    location = forms.ModelChoiceField(queryset=Location.objects.all().order_by('location_name'))

Модели:


class Patient(models.Model):
    name = models.CharField(max_length=200)
    idn = models.CharField(max_length=200, unique=True)
    date_of_birth = models.DateField()
    date_of_confirm = models.DateField()
    case_number = models.IntegerField()

    def get_absolute_url(self):
        return reverse("patient_detail", kwargs={'pk':self.pk})

    def __str__(self):
        return self.name

class Location(models.Model):
    patient = models.ForeignKey(Patient, related_name='locations', on_delete=models.CASCADE, null=True, blank=True)
    location_name = models.CharField(max_length=50, null=True, blank=True)
    address = models.CharField(max_length=300, null=True, blank=True)
    district = models.CharField(max_length=300, null=True, blank=True)
    grid_x = models.IntegerField(null=True, blank=True)
    grid_y = models.IntegerField(null=True, blank=True)
    date_from = models.DateField(null=True, blank=True)
    date_to = models.DateField(null=True, blank=True)
    details = models.CharField(max_length=300, null=True, blank=True)
    category = models.CharField(max_length=300, null=True, blank=True)

    def __str__(self):
        return self.location_name

Я думал, что могу использовать instance, но это работает только для ModelForms, и моя форма не связана ни с какими моделями.

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