Django कोड क्वेरीसेट, शफल आईडी, और शफल आदेश में क्वेरी डेटाबेस से आईडी प्राप्त करने के लिए - पायथन, mysql, django, डेटाबेस

मैं Django में निम्नलिखित करने की कोशिश कर रहा हूँ:

  1. क्वेरी को संतुष्ट करने वाले सभी रिकॉर्ड की आईडी वापस करने के लिए डेटाबेस क्वेरी करें।
  2. क्वेरी से आईडी की सूची को यादृच्छिक क्रम में घुमाएं।
  3. एक नई क्वेरीसेट बनाएं जो शफल आदेश में डेटाबेस से रिकॉर्ड प्राप्त करे।

तो यदि मेरी प्रारंभिक डेटाबेस क्वेरी इस तरह दिखती है:

queryset = Item.objects.filter(my_field = a_value)

मैं क्वेरी से आईडी की सूची में कैसे जा सकता हूं ताकि मैं इसके साथ शफल कर सकूं:

random.shuffle(list_of_ids_matching_query)

अर्थात। मैं बनाना चाहता हूँ list_of_ids_matching_query क्वेरीसेट से, लेकिन मैं यह नहीं कर सकता कि यह कैसे करें।

मैं फिर लाइनों के साथ एक प्रश्न करने की योजना बना रहा हूं:

queryset = Item.objects.filter(pk__in=list_of_ids_matching_query)

लेकिन मुझे शर्ट सूची में आईडी के समान क्रम में रिकॉर्ड वापस करने के लिए क्वेरी की आवश्यकता है। क्या वह ऐसा करेगा? या मुझे एक समय में डेटाबेस से रिकॉर्ड्स निकालना होगा।

मैं क्या करने की कोशिश कर रहा हूं, और ऐसा करने का एक बेहतर तरीका हो सकता है, डेटाबेस से यादृच्छिक क्रम में परिणामों का एक यादृच्छिक सेट प्राप्त करना है।

उत्तर:

जवाब के लिए 2 № 1

इस सवाल का प्रयास करें

list_of_ids_matching_query = list(Item.objects.filter(my_field = a_value).values_list("id", flat=True))

शफल सूची में आईडी के समान क्रम में रिकॉर्ड प्राप्त करने के लिए,

ordering = "FIELD(`id`, %s)" % ",".join(str(id) for id in shuffiled_list)
Item.objects.filter(pk__in=shuffiled_list).extra(select={"ordering": ordering }, order_by=("ordering", ))

संबंधित सवाल
सबसे लोकप्रिय