Как решить проблему ошибки атрибута в django?

Я пытаюсь заставить панель поиска работать. Всякий раз, когда я что-то набираю в views.py, оно должно появиться, а другие нет. Я написал код, который покажу, но когда я запускаю код, он выдает ошибку атрибута type object 'Destination' has no attribute 'filter'. Как решить эту проблему?

index.html

<form class = "love" method = "GET" action = "">
    <input type = "text" placeholder='Search..' name = "srh" value = "{{request.GET.srh}}"> <br>
<button type = "submit" class = "btn btn-danger"> Search </button>
</form>

просмотры.py

from django.shortcuts import render
from . models import Destination
from django.db.models import Q

def index(request):
    query = request.GET.get('srh')
    if query:
        match = Destination.filter(Q(desc_icontains=query))

    # instead of writing this
    target1 = a, b= [Destination() for __ in range(2)]
    a.img = 'Article.jpg'
    b.img = 'Micro Tasks.jpeg'

    a.desc = 'Article Writing'
    b.desc = 'Micro Tasks'

    # I am trying to make a loop but it is not working.
    target1 = Destination.objects.all()
    for field in target1:
        [Destination(img = f'{field.img}', title = f'{field.title}') for __ in range(2)]

URL-адрес приложения

from . import views
urlpatterns = [path('', views.index, name='index')]

основной URL

from django.contrib import admin
from django.urls import path, include
from firstapp.views import *

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('firstapp.urls'))]

Установленные приложения

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]
Destination.objects.filter??
Abdul Niyas P M 13.07.2019 18:11

Я обновил views.py Пожалуйста, проверьте кого-нибудь и ответьте мне.

Ali 16.07.2019 08:49
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
463
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваш Destination класс нет модель. Чтобы сделать что-то моделью, вы должны сделать этот класс подклассом Класс Model [Django-doc]. Кроме того, поля, которые вы хотите сохранить в базе данных, должны быть экземплярами Field класс. Таким образом, вы должны переписать свою модель следующим образом:

class Destination(models.Model):
    desc = models.CharField(max_length=255)
    img = models.CharField(max_length=255)
    price = models.IntegerField()

Нет необходимости добавлять поле id. Если вы не укажете первичный ключ самостоятельно, Django создаст поле с именем id, которое будет AutoField. Вместо этого вы можете сделать imgImageField [Джанго-док], но это уже другой разговор.

После создания этой модели вы можете запустить manage.py makemigrations [Джанго-док] для создания файлов миграции; и manage.py migrate [Джанго-док] для переноса вашей базы данных и создания соответствующих таблиц.

Чтобы получить доступ к записям модели, вам необходимо получить доступ к Manager, например, .objects Django автоматически прикрепится к вашей модели. Только Managers и QuerySets могут .filter(..), .exclude(..) и т. д.

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

Наконец, использование .distinct() здесь бесполезно, так как desc является полем модели в модели Destination, и поэтому фильтрация не будет СОЕДИНЯТЬСЯ с внешними таблицами.

Таким образом, вы можете реализовать это как:

    match = Destination.objects.filter(desc__icontains=query)

Что вы подразумеваете под manager и QuerySet. Не могли бы вы уточнить?

Ali 13.07.2019 18:19

Это также дает мне ошибку после изменений в переменной соответствия. type object 'Destination' has no attribute 'objects'

Ali 13.07.2019 18:22

@Ali: ты сделал Destination модель?

Willem Van Onsem 13.07.2019 18:25

Да это class Destination: id : int desc : str img : str price : int

Ali 13.07.2019 18:26

@Ali: не могли бы вы поделиться своим определением модели? Отредактируйте свой вопрос.

Willem Van Onsem 13.07.2019 18:27

Я добавил models.py в код выше. Проверь это.

Ali 13.07.2019 18:29

@Ali: это нет допустимое определение модели, см. обновление.

Willem Van Onsem 13.07.2019 18:34

Всякий раз, когда я makemigrations, он выдает эту ошибку RuntimeError: Model class firstapp.models.Destination doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.

Ali 13.07.2019 19:03

@Ali: еще одна ошибка в вашей настройке django: в INSTALLED_APPS в настройках вы должны добавить строку с именем вашего firstapp.

Willem Van Onsem 13.07.2019 19:04

Я обновил код с установленными приложениями. Проверь, в чем проблема?

Ali 13.07.2019 19:04

Один вопрос, что вы говорили о «Менеджере» и QuerySet? Я этого не понял.

Ali 13.07.2019 19:10

Другие вопросы по теме