سلام استاد خسته نباشید
استاد حقیقتش یه مشکلی چند وقته مغزمو درگیر کرده سوال هم پرسیدم در رابطه باهاش و دوستانیم اومدن کمک کنند ولی جواب درستی ازشون نگرفتم یه دوستیم خیلی کمکم کرد برید پاسخاشو ببینید به جواب نزدیکم کرد ولی دیگه نتونست کمکم کنه چون کده ایشون فانکشن بود ولی من با کلاس ویو این مسئلرو اموزش دیدم
استاد من یه سایتی دارم که دوتا مدل داره یکی game یکی app و صفحه هایه سرچ این دوتا باهم فرق دارن و وقتی یکی بخواد سرچ کنه باید حتما بره تو صفحه ی خوده مدل من نمیخوام اینجوری باشه میخوام هردو مدل نقطه سرچشون یکی باشه و کاربر بتونه جفتشو از یه جا سرچ کنه
من همه ی کدارو قرار میدم ممنون میشم خودتون با این کدا اون ویو رو درست کنید تا من بتونم هم بهتر درک و یاد بگیرم
کمک بزرگی بهم میکنید
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 برایه برنامه ها
from itertools import chain
class SearchProductsView(ListView):
template_name = 'products/products_list_game.html'
paginate_by = 3
def get_queryset(self):
request = self.request
query = request.GET.get('q')
games = game.objects.get_active_products()
apps = app.objects.get_active_products()
if query is not None:
games = games.filter(title__icontains=query)
apps = apps.filter(title__icontains=query)
results = chain(games, apps)
return results
این کد رو تست کنید ببینید مشکلتون برطرف میشه
اگر ارور داد بجای این خط
results = chain(games, apps)
این رو قرار بدید و مجدد تست کنید
results = list(chain(games, apps))
داداش دمت گرم بمولا عشقی بازم دمت گرم