Отобразить данные искомого элемента, используя Django - PullRequest
1 голос
/ 28 марта 2020

У меня сейчас есть панель поиска. Он ищет клиентов, которые заполнили форму, используя имена и фамилии, поиск предоставляет список с именами, являющимися ссылками на страницу клиента.

Я изо всех сил пытаюсь отобразить эти данные c о человеке, модель имеет около 20 полей, нужно будет отобразить все. Как я могу получить данные одного человека и отобразить все данные из модели?

В настоящее время страница становится пустой, хотя URL отображает правильный идентификатор клиента.

Спасибо заранее.

изменить:

Views.py

# for search
def clientSearch(request):
    query = request.GET.get('q')

    if query:
        queryset = (Q(FIRST_NAME__icontains=query))|(Q(LAST_NAME__icontains=query))
        results = Register_Client.objects.filter(queryset).distinct()
    else:
        results = []

    content = {
        'results' : results,
        'query' : query
    }

    return render(request, 'HTML/clientSearch.html', content)

# For displaying details
def client(request, id):
    obj = get_object_or_404(Register_Client, id=id)
    field = obj._meta.fields
    content = {
        "field":field
    }
    return render(request, 'HTML/Client.html', content)

Модель:

class Register_Client(models.Model):
    TITLES = (
            ('MR', 'Mr'),
            ('MISS', 'Miss'),
            ('MRS', 'Mrs'),
            ('OTHER', 'Other')
    )
    TITLE = models.CharField(max_length=5,
                            choices=TITLES,
                            blank=True,
                            default=None)
    FIRST_NAME = models.CharField(max_length=50)
    LAST_NAME = models.CharField(max_length=50)
    DATE_OF_BIRTH = models.DateField()
    ADDRESS_LINE_ONE = models.CharField(max_length=255)
    ADDRESS_LINE_TWO = models.CharField(max_length=255,
                                        blank=True)
    CITY = models.CharField(max_length=50,
                            blank=True)
    POSTCODE = models.CharField(max_length=8)
    EMAIL = models.EmailField(blank=True)

    phone_regex = RegexValidator(regex=r'^\+?1?\d{11}$', message ="You must enter an 11 digit number")
    TEL_NUM = models.CharField(validators=[phone_regex], max_length=11, blank=True)
    MOBILE = models.CharField(validators=[phone_regex], max_length=11, blank=True)

    GP_NAME = models.CharField(max_length=255,
                                blank=True)
    NHS_NO = models.CharField(max_length=20,
                                blank=True)
    GP = models.CharField(max_length=50,
                            blank=True)
    GENDERS = (
                ('MALE', 'Male'),
                ('FEMALE', 'Female'),
                ('OTHER', 'Other')
                )
    GENDER = models.CharField(max_length=6,
                            choices=GENDERS,
                            blank=True,
                            default=None)
    SCHOOL = models.CharField(max_length=50,
                                blank=True)
    ETHNICITY = (
                ('WHITEB','White – British'),
                ('WHITEI','White – Irish'),
                ('WHITEO','White - Other'),
                ('MIXWBC','Mixed – White & Black Caribbean'),
                ('MIXWBA','Mixed – White & Black African'),
                ('MIXO','Mixed – Other'),
                ('AABI','Asian / Asian British - Indian'),
                ('AABP','Asian / Asian British – Pakistani'),
                ('AABB','Asian / Asian British - Bangladeshi'),
                ('AABO','Asian / Asian British – Other'),
                ('BBBA','Black/Black British – African'),
                ('BBBO','Black/Black British – Other'),
                ('C','Chinese'),
                ('O','Any Other Ethnic Group'),
                ('NOT','Not Stated'),

    )
    ETHNIC = models.CharField(max_length=40,
                            choices=ETHNICITY,
                            blank=True,
                            default=None)`

Ответы [ 2 ]

1 голос
/ 28 марта 2020

Вы можете сделать это, отфильтровав данные в python в файле views.py. Используйте

ModelName.objects.filter(person_firstname="request").all()

и возвращайте ответ как

return HttpResponse(ModelName.objects.filter(person_firstname="request").all())

Если вы хотите, чтобы возвращаемые данные были в формате JSON, используйте

 return HttpResponse(json.dumps(list(ModelName.objects.filter(person_firstname="request").all())
0 голосов
/ 29 марта 2020

Я сосредоточусь на client представлении

Измените его на следующее:

# For displaying details
def client(request, id):
    obj = get_object_or_404(Register_Client, id=id)
    context = {
        "obj": obj
    }
    return render(request, 'HTML/Client.html', context)

В вашем шаблоне HTML/Client.html:

<!DOCTYPE html>
<html>
    <head></head>
    <body>
        <p>TITLES: {{ obj.TITLES }}</p>
        <p>TITLE: {{ obj.TITLE }}</p>
        <p>FIRST_NAME: {{ obj.FIRST_NAME }}</p>
        <p>LAST_NAME: {{ obj.LAST_NAME }}</p>
        <p>DATE_OF_BIRTH: {{ obj.DATE_OF_BIRTH }}</p>
        <p>ADDRESS_LINE_ONE: {{ obj.ADDRESS_LINE_ONE }}</p>
        <p>ADDRESS_LINE_TWO: {{ obj.ADDRESS_LINE_TWO }}</p>
        <p>CITY: {{ obj.CITY }}</p>
        <p>POSTCODE: {{ obj.POSTCODE }}</p>
        <p>EMAIL: {{ obj.EMAIL }}</p>
        <p>phone_regex: {{ obj.phone_regex }}</p>
        <p>TEL_NUM: {{ obj.TEL_NUM }}</p>
        <p>MOBILE: {{ obj.MOBILE }}</p>
        <p>GP_NAME: {{ obj.GP_NAME }}</p>
        <p>NHS_NO: {{ obj.NHS_NO }}</p>
        <p>GP: {{ obj.GP }}</p>
        <p>GENDERS: {{ obj.GENDERS }}</p>
        <p>GENDER: {{ obj.GENDER }}</p>
        <p>SCHOOL: {{ obj.SCHOOL }}</p>
        <p>ETHNICITY: {{ obj.ETHNICITY }}</p>
        <p>ETHNIC: {{ obj.ETHNIC }}</p>
    </body>
</html>
...