Я пытаюсь заставить панель поиска работать. Всякий раз, когда я что-то набираю в 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',
]
Я обновил views.py Пожалуйста, проверьте кого-нибудь и ответьте мне.






Ваш 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. Не могли бы вы уточнить?
Это также дает мне ошибку после изменений в переменной соответствия. type object 'Destination' has no attribute 'objects'
@Ali: ты сделал Destination модель?
Да это class Destination: id : int desc : str img : str price : int
@Ali: не могли бы вы поделиться своим определением модели? Отредактируйте свой вопрос.
Я добавил models.py в код выше. Проверь это.
@Ali: это нет допустимое определение модели, см. обновление.
Всякий раз, когда я makemigrations, он выдает эту ошибку RuntimeError: Model class firstapp.models.Destination doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.
@Ali: еще одна ошибка в вашей настройке django: в INSTALLED_APPS в настройках вы должны добавить строку с именем вашего firstapp.
Я обновил код с установленными приложениями. Проверь, в чем проблема?
Один вопрос, что вы говорили о «Менеджере» и QuerySet? Я этого не понял.
@Ali: см. docs.djangoproject.com/en/2.1/topics/db/models/… и docs.djangoproject.com/en/2.1/ref/models/querysets
Destination.objects.filter??