• 1400/02/24

سوال پاسخ داده نشده :

سلام من اینم سوالو یه روز پیش پرسیدم ولی هیشکی جواب نداد ممنون میشم با کدایه خودم راهنماییم کنید برا اینکه سوال هم خیلی زیاد بود و نوشتنش وقت زیادی ازم میگیره همون لینک سوال اینجا میزارم دیگه آدیت نکنید یه کلیک کنید تو اون صفحه ببینید

https://toplearn.com/ShowQuestion/53114/search-product

  • 1400/02/25
  • ساعت 00:18

سلام وقت بخیر

ببینید دوست من این که تابع مورد نظر شما روی چی سرچ کنه رو شما تعیین می کنید حالا من چند تا پیشنهاد برای شما دارم 

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

چون شما دو تا کوئری دارید و میخواید هر دوی این هارو توی یک صفحه سرچ نمایش بدید

یا باید این شکل عمل کنید که مثلا اول نتایج سرچ شده روی کوئری 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 ...

موفق باشید


  • 1400/02/25
  • ساعت 11:44

داش یه سوال الان 

ببین ویو من یه کلاس داره واسه ی سرچ 

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()

و داخلش یه فانکشن داره که یه کوئری توش تعریف شده الان من باید این کلاسو کامل پاک کنم؟نیازه این فانکشن رو هم بندازم تویه اون فانکشنی که تو گفتی 

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


  • 1400/02/25
  • ساعت 12:21

به این دیگه نیازی نداری میتونی پاکش کنی

کدهای مربوط به سرچ هم بالا نوشتم همون هاییه که نوشته شده

یه ویو جدید بساز و ازش استفاده کن

فقط اسم هارو تغییر بده

یه موضوع دیگه مطمئن باشید هر مشکلی که بهش برمیخورید یکی قبلا بهش برخورده و راه حلش موجوده

مثلا نحوه سرچ کردن بین دو تا مدل مختلف و نمایش نتیجه در یک صفحه 

با سرچ django search in multiple models

اولین صفجه ای که براتون میاد این هست

https://stackoverflow.com/questions/46695150/django-search-fields-in-multiple-models

که راه حل رو کامل گفته

و یا همون متن رو توی youtube سرچ کنید و ویدیو مرتبط براتون میاره

سوال پرسیدن اصلا بد نیست من خودم به شخصه خیلی سوال دارم و تازه کار هستم ولی سعی میکنم وقتی به مشکلی میخورم همون موضوع رو سرچ کنم حین همین سرچ کلی چیزای جدید هم یاد میگیرم

پیشنهاد میکنم حتما روزی چند ساعت دست به سرچ باشید از هر جهت بهتون کمک میکنه

موفق باشید


  • 1400/02/25
  • ساعت 14:54

داش واقعا دلم میخواد خودم برم اینکارو بکنم ولی انگلیسیم در اون حد قوی نیست که بتونم منظورشونو خوب متوجه بشم زیاد اینکارارو کردم و حتی یبارم خودم تو اون سایتی که دادی سوال پرسیدم ولی وقتی جواب دادن نتونستم منظورشونو بفهمم سره همین این تنها راهمه 


  • 1400/02/26
  • ساعت 11:15

داداش یع سوال الان این کدایی که دادی درستن ولی من چجوری تو فانکشین بیارم این کئوری هایی که قبلا داده بودمو دوباره بندازم تو فانکشن الان اینو نگا کن

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 render(request, 'products/products_list_game.html', context)

این الان اصلا باید دوتا تمپلیته داشته باشه چجوری قراره بهش دوتا تمپلیته بدم

یا 

    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()

اینم من باید بندازم داخل اون ویو واگرنا اصلا کار نمیکنه تست هم کردم دیدم q رو نمیشناسه

ببخشید زیاد زحمت کشیدی میدونم ولی کمکم کنی تمومش کنم ممنونت میشم


  • 1400/02/26
  • ساعت 12:25

راستش نمیدونم چجوری باید کمک کنم 

من توضیحاتی که در این مورد میدونستم رو بهت گفتم

و جوابت هم همونیه که فرستادم الان بازم بخوام بگم باید همونارو بفرستم

پیشنهاد میکنم قسمت سرچ دوره رو مجدد ببینی و با دقت بیشتر بررسی کنی که توی پس زمینه چه اتفاقی میفته و اصلا اون q از کجا میاد و چیزای دیگه 

الان شما تابعی که من نوشتم رو کپی کردی توی کدهای خودت و نامگذاری هارو تغییر ندادی 

من یه نمونه از چجوری کارکرد این موضوع برات نوشتم باید با توجه به امکانات پروژه خودت پیاده سازیش کنی

نیازی به دو تا تمپلیت هم نیست یدونه کافیه توضیح دادم بالاتر باید چیکار کنی برای نمایش دو تا کوئری تو یک صفحه


logo-samandehi