• 1400/02/27

multiple search model :

سلام استاد خسته نباشید

استاد حقیقتش یه مشکلی چند وقته مغزمو درگیر کرده سوال هم پرسیدم در رابطه باهاش و دوستانیم اومدن کمک کنند ولی جواب درستی ازشون نگرفتم یه دوستیم خیلی کمکم کرد برید پاسخاشو ببینید به جواب نزدیکم کرد ولی دیگه نتونست کمکم کنه چون کده ایشون فانکشن بود ولی من با کلاس ویو این مسئلرو اموزش دیدم

استاد من یه سایتی دارم که دوتا مدل داره یکی 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 برایه برنامه ها

  • 1400/02/27
  • ساعت 23:49
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))

  • 1400/02/28
  • ساعت 00:43

داداش دمت گرم بمولا عشقی بازم دمت گرم


logo-samandehi