سؤال

ولدي تطبيق يسمى الموقع. موقع ديه البلد، الدولة، المدينة، Big_City_Nearby، خط الطول والعرض.

ولدي طلب للحصول على البند للبيع. الصنف لديه عنوان، وصلة، الوصف، السعر والمكان الذي هو ForeignKey ().

والآن، إذا كان شخص يريد أن يرى جميع السلع المعروضة للبيع في الولايات المتحدة، وانقر على وصلة (دعنا نقول <لأ href = "http://example.com/United-States/" يختلط = "نوفولو noreferrer" > http://example.com/United-States/ ) وسوف URL تمرير في "الولايات المتحدة الأمريكية" كبلد مع الدولة والمدينة وbig_city_nearby فارغة.

#in view.py
class by_location(request, country, state, city, big_city_nearby)
   location = Location.objects.filter(country=country, state=state, city=city, big_city_nearby=big_city_nearby)
   items = Items.objects.filter(location__in=[location.id for loc in location])
   return render_to_response('item/by_location.html', {"items":itmes, "country":countyr, "cit":city, "nearby":big_city_nearby})

وليس هناك مشكلة إذا مروا في ( http://example.com/United_State/California/ أوكلاند ) ما أستطيع أن نمضي قدما وسرد جميع العناصر في أوكلاند دون الحاجة إلى عرض الموقع في أصناف تم العثور عليها.

والمشكلة هي عندما حدد http://example.com/United_States/ أو <أ href ل = "http://example.com/United_States/California/" يختلط = "نوفولو noreferrer"> http://example.com/United_States/California/ . كما قلت لعرضه الآن على موقع كل البنود والبنود يمكن أن يكون من مدن مختلفة.

وهكذا عندما يحصل على قالب قائمة العناصر، فإنه يحصل فقط ForeignKey (المكان) في كل مادة. أنا يمكن وضعها في مكان آخر حلقة، حيث يتم فحص كل بند والكائن الموقع يتم جلب وضعها في الصفوف (tuple) مع الكائن البند. ولكن ذلك سيكون غير فعال جدا SQL. كما أود أن ضرب قاعدة البيانات لكل عنصر وجدت للحصول على وجوه الموقع الفعلي.

هل هناك طريقة أين يمكنني القول ForeignKey تحتجز المدينة بدلا من رقم إلى الصف الموقع في قاعدة البيانات.

لجعل مسألة بسيطة: هل هناك طريقة أفضل من ترك الموقع من كتطبيق، دون حاجة إلى توفير بلد أو دولة أو مدينة ... الخ. في كل صف البند.

وتشك،

وVN44CA

هل كانت مفيدة؟

المحلول

وItem.objects.filter(...).select_related("location"). وهذا التسجيل على الطاولة المواقع، لذلك سوف يكون مجرد استفسار واحد.

وحتى أفضل، Item.objects.filter(location__country=country, location__state=state).select_related("location") ويمكنك حذف الاستعلام Location تماما.

وبصراحة، أنا أواجه صعوبة في معرفة إذا كان هذا هو كل ما تحتاجه، ولكن أن يعالج O (N) يستعلم القضية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top