मैं नीचे के रूप में एक डाटा मॉडल है प्रश्नों की संख्या कैसे अनुकूलित करें:जब Django में raw_id_fields का उपयोग कर व्यवस्थापक
class Candidate(models.Model):
name = models.CharField()
class Skill(models.Model):
name = models.CharField()
class CandidateSkill(models.Model):
candidate = models.ForeignKey(Candidate)
skill = models.ForeignKey(Skill, related_name='candidate_skills')
proficiency = models.CharField()
और व्यवस्थापक में मेरे पास है:
class CandidateSkillInline(admin.TabularInline):
model = CandidateSkill
fields = ('skill',)
extra = 0
raw_id_fields = ('skill',)
class CandidateAdmin(admin.ModelAdmin):
model = Candidate
fields = ('name',)
inlines = [CandidateSkillInline]
प्रत्येक उम्मीदवार कई कौशल हो सकता है । यहां समस्या यह है कि प्रत्येक इनलाइन के लिए परिवर्तन पृष्ठ में एक प्रश्न कौशल (SELECT ••• FROM "skill" WHERE "skill"."id" = <id>
) लाने के लिए उपयोग किया जाएगा। यदि मैं CandidateSkillInline
में read_only
के रूप में फ़ील्ड जोड़ता हूं तो अतिरिक्त प्रश्न नहीं होंगे। हालांकि मैं इनलाइनों में नए आइटम जोड़ने में सक्षम होना चाहता हूं। बात मैं कोशिश की है:
1) कस्टम CandidateSkillInline
को formset कहा:
def get_queryset(self, request):
super(CandidateSkillInline, self).get_queryset(request).select_related('skill')
3) ओवरराइड get_queryset
CandidateAdmin
पर:
class CandidateSkillInlineFormset(BaseInlineFormSet):
def __init__(self, *args, **kwargs):
super(CandidateSkillInlineFormset, self).__init__(*args, **kwargs)
self.queryset = self.queryset.select_related('skill')
2) इनलाइन पर get_queryset
ओवरराइड
def get_queryset(self, request):
return super(CandidateAdmin, self).get_queryset(request).prefetch_related('candidate_skills__skill')
हालांकि, मुझे अभी भी मिलता है प्रत्येक कौशल के लिए एक प्रश्न। प्रश्नों को नहीं भेजा जाने का एकमात्र तरीका यह है कि जब मैं skill
read_only_fields
में उम्मीदवार स्किलइनिल में सेट करता हूं। सवाल यह है कि मैं प्रत्येक इनलाइन के लिए एक क्वेरी में कौशल का चयन या प्रीफेच कैसे कर सकता हूं?
कृपया एक स्पष्टीकरण कृपया। आप कहते हैं, "प्रत्येक उम्मीदवार के पास कई कौशल हो सकते हैं" लेकिन यहां मॉडलिंग किया जा रहा है, बहुत से रिश्ते हैं (Django के ManyToManyField के स्पष्ट उपयोग के बिना) – e4c5
@ e4c5 मैंने अधिक स्पष्टीकरण के लिए मॉडल को अपडेट किया है। मुझे प्रत्येक कौशल के लिए 'प्रवीणता' को स्टोर करने की ज़रूरत है, इसलिए कई – Nasir
एचएम की आवश्यकता है, केवल एक ही बदलाव है जिसे मैं देखता हूं कि नाम फ़ील्ड प्रवीणता में बदल रहा है, जो अभी भी इसे कई 'उम्मीदवार' के माध्यम से उम्मीदवारस्किल – e4c5