سلام
استاد من دوررو کامل دیدم و الان من یه سایتیم خودم ساختم و این سایت دو مدل پروداکت داره در پوشه هایه جدا یعنی دوتا app جدا براش ساختم بعد شما تو دوره رفتین تو خوده app پروداکت و داخل ویوش سرچ رو طراحی کردین من الان اینکارو بکنم چون دوتا پروداکت هستن سرچ ها جدا میشن و مجبور میشن اونایی که دنبال بازی میگردن برن تو قسمت بازی دنبالش بگردن اونایی که برنامه برن تو قسمت برنامه خب من نمیخوام اینجوری باشه میخوام جفتشون یه سرچ داشته باشن
vectorgold.ir
اینم ادرس سایت میتونید برید ببینید زیاد جالب نیست این شکلی باشه
site_products
views
class SearchProductsView(ListView):
template_name = 'products/products_list_game.html'
paginate_by = 3
def get_queryset(self):
request = self.request
print(request.GET)
query = request.GET.get('q')
if query is not None:
return game.objects.filter(active=True, title__icontains=query)
return game.objects.get_active_products()
site_products
model
class GameManager(models.Manager):
def get_active_products(self):
return self.get_queryset().filter(active=True)
def get_products_by_category(self, category_name):
return self.get_queryset().filter(categories__name__iexact=category_name, active=True)
def get_by_id(self, game_id):
qs = self.get_queryset().filter(id=game_id)
if qs.count() == 1:
return qs.first()
else:
return None
class game(models.Model):
title = models.CharField(max_length=150, verbose_name='عنوان (500x300)')
developer_game = models.CharField(max_length=150, null=True, verbose_name='سازنده', blank=True)
size_game = models.CharField(max_length=150, null=True, verbose_name='حجم', blank=True)
of_on = models.CharField(max_length=150, null=True, verbose_name='آفلاین/آنلاین', blank=True)
category = models.CharField(max_length=150, null=True, verbose_name='دسته بندی', blank=True)
text_h1 = models.CharField(max_length=150, null=True, verbose_name='متن بزرگ 1', blank=True)
text_h2 = models.CharField(max_length=150, null=True, verbose_name='متن بزرگ 2', blank=True)
description_1 = models.TextField(verbose_name='توضیحات 1', null=True, blank=True)
description_2 = models.TextField(verbose_name='توضیحات 2', null=True, blank=True)
image = models.ImageField(upload_to=upload_image_path, null=True, blank=True, verbose_name='تصویر (840x480)')
image_1 = models.ImageField(upload_to=upload_image_path, null=True, blank=True, verbose_name='تصویر 1 (840x480)')
active = models.BooleanField(default=False, verbose_name='فعال / غیرفعال')
categories = models.ForeignKey(GameCategory, blank=True, verbose_name="دسته بندی ها", on_delete=models.CASCADE)
image_new = models.ImageField(upload_to=upload_image_path, null=True, blank=True, verbose_name='تصویر پست جدید(300x110)')
site_products_app
views
class SearchProductsView(ListView):
template_name = 'products/products_list_app.html'
paginate_by = 6
def get_queryset(self):
request = self.request
print(request.GET)
query = request.GET.get('q')
if query is not None:
return app.objects.filter(active=True, title__icontains=query)
return app.objects.get_active_products()
site_products_app
model
class AppManager(models.Manager):
def get_active_products(self):
return self.get_queryset().filter(active=True)
def get_products_by_category(self, category_name):
return self.get_queryset().filter(categories__name__iexact=category_name, active=True)
def get_by_id(self, app_id):
qs = self.get_queryset().filter(id=app_id)
if qs.count() == 1:
return qs.first()
else:
return None
def search(self, query):
lookup = (
Q(title__icontains=query) |
Q(description__icontains=query) |
Q(tag__title__icontains=query)
)
return self.get_queryset().filter(lookup, active=True).distinct()
class app(models.Model):
title = models.CharField(max_length=150, verbose_name='عنوان (500x300)')
developer_app = models.CharField(max_length=150, null=True, verbose_name='سازنده', blank=True)
size_app = models.CharField(max_length=150, null=True, verbose_name='حجم', blank=True)
of_on = models.CharField(max_length=150, null=True, verbose_name='آفلاین/آنلاین', blank=True)
category = models.CharField(max_length=150, null=True, verbose_name='دسته بندی', blank=True)
text_h1 = models.CharField(max_length=150, null=True, verbose_name='متن بزرگ 1', blank=True)
text_h2 = models.CharField(max_length=150, null=True, verbose_name='متن بزرگ 2', blank=True)
description_1 = models.TextField(verbose_name='توضیحات 1', null=True, blank=True)
description_2 = models.TextField(verbose_name='توضیحات 2', null=True, blank=True)
image = models.ImageField(upload_to=upload_image_path, null=True, blank=True, verbose_name='تصویر (840x480)')
image_1 = models.ImageField(upload_to=upload_image_path, null=True, blank=True, verbose_name='تصویر 1 (840x480)')
active = models.BooleanField(default=False, verbose_name='فعال / غیرفعال')
categories = models.ForeignKey(AppCategory, blank=True, verbose_name="دسته بندی ها", on_delete=models.CASCADE)
image_new = models.ImageField(upload_to=upload_image_path, null=True, blank=True, verbose_name='تصویر پست جدید (300x110)')
objects = AppManager()
site_products برایه بازی ها در سایت هستن
site_products app برایه برنامه ها
اقا کسی نمیخواد جواب منم بده
یه view برای سرچ درس کن تو جفت مدلات جستجو کن دوتا لیست بفرست تو صفحت یه قسمت بازی های مرتبط با سرچو نمایش بده یه قسمتم برنامه هاتو دیگه
سلام وقت بخیر
ببینید دوست من این که تابع مورد نظر شما روی چی سرچ کنه رو شما تعیین می کنید حالا من چند تا پیشنهاد برای شما دارم
شما قراره دو تا کوئری از دو تا جنس مختلف رو سرچ کنید و نمایش بدید اینجا مشکلی که به وجود میاد اینه که توی نمایشش شاید کمی به مشکل بخورید
چون شما دو تا کوئری دارید و میخواید هر دوی این هارو توی یک صفحه سرچ نمایش بدید
یا باید این شکل عمل کنید که مثلا اول نتایج سرچ شده روی کوئری 1 رو نمایش بده بعد روی کوئری 2 یا باید بیاید این کوئری هارو chain کنید بفرستید به صفحه یعنی یکیشون کنید که من پیشنهاد نمیکنم (اگر خواستید استفاده کنید سرچ کنید و براتون میاره نحوه chain کردن رو)
راهکار خوب اینه که توی فرم سرچتون کنارش یه دراپ دان بزارید و بزارید کاربر موقع سرچ انتخاب کنه توی کدوم مدل میخواد سرچ کنه مثلا روی بازی با برنامه و سمت بکند هر کدوم انتخاب شده بود کوئری اون رو فیلتر کنید
و اگر نخواستید هم که همون راه بالا یعنی دو تا کوئری رو به ترتیب بفرستید به صفحه
حالا نحوه سرچش
چون دو تا مدل مجزا هستن به صفحه جداگونه بزارید برای نمایش نتایج سرچ
تابع مورد نظر سرچ هم اصلا توی اپ اصلی یا یه جای مشترک بنویسید جاش خیلی مهم نیست
تابعش به این صورت میشه :
def search(request):
title = request.GET.get("title")
games = game.objects.all()
apps = app.objects.all()
if title and title != "":
games = game.objects.filter(title__icontains=title)
apps = app.objects.filter(title__icontains=title)
context = {
"apps": apps,
"games":games
}
return ...
به این شکل کوئری هاتون رو میفرستید اگر بخواید دراپ دان بزارید هم این میشه :
def search(request):
title = request.GET.get("title")
target = request.GET.get("target")
if target and target == "game":
if title and title != "":
query = game.objects.filter(title__icontains=title)
else:
query = game.objects.all()
else:
if title and title != "":
query = app.objects.filter(title__icontains=title)
else:
query = app.objects.all()
context = {
"query": query
}
return ...
موفق باشید