के आधार पर क्वेरीसमूह मैं एक मॉडल है कि इस तरह दिखता है। आमंत्रण मॉडल में, मैं केवल रोल मॉडल में सभी प्रविष्टियों को दिखाने के बजाय Django Admin के भीतर परिवर्तन फ़ॉर्म में चुने गए ईवेंट से जुड़ी भूमिकाओं को कैसे दिखा सकता हूं?Django सीमा ManytoMany चयनित FK
उत्तर
आप गतिशील roles
choices
के विकल्पों फ़िल्टर करना चाहते हैं, तो आप ajax
जरूरत है इस कार्य को करने होंगे।
यहाँ कैसे आप इस कार्य करवा सकते है ..
1:event
की OnChange
ajax
के माध्यम से कस्टम view
करने के लिए event_id
भेजें।
2:Roles
मॉडल filter
event_id
के आधार पर आप ajax
अनुरोध से मिला है और फ़िल्टर्ड roles
लौट JSON
में serializing
द्वारा से।
3: मौजूदा roles
साफ़ करें और JSON
प्रतिक्रिया के माध्यम से पार्सिंग द्वारा दोबारा तैयार करें।
उदाहरण के लिए: यह एक jquery
getJSON
उदाहरण
जावास्क्रिप्ट:
$("#event").change(function(){
var event_id = $(this).val();
$.getJSON("/my-app/my-roles-filter-view/"+ event_id +"/",function(data){
var roles_dd = $("#roles");
$('#event >option').remove();
$.each(data, function(index,value) {
roles_dd.append($("<option />").val(value).text(value));
});
})(django.jquery);
यूआरएल की:
('^/my-app/my-roles-filter-view/(?P<event_id>\d+)/$','my_view'),
विचार:
def my_view(request,event_id):
qs = Role.objects.filter(event=event_id).values_list('id')
return HttpResponse(simplejson.dumps(qs),mimetype='application/javascript')
यह एक उदाहरण मात्र jquery
का उपयोग कर आप ajax
किसी भी प्रकार का उपयोग करें और इस लक्ष्य को हासिल कर सकते हैं।
आपको मॉडल के लिए अपने व्यवस्थापक वर्ग में एक कस्टम formfield_for_foreignkey
विधि प्रदान करने की आवश्यकता है।
(प्रलेखन कि मैं जुड़ा हुआ से) यह उदाहरण, मिलना चाहिए आप आरंभ:
class MyModelAdmin(admin.ModelAdmin):
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == "car":
kwargs["queryset"] = Car.objects.filter(owner=request.user)
return super(MyModelAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
यह लोड समय और इसके गतिशील नहीं पर किया जाएगा: यहाँ एक विवरण और कोड यदि आप रुचि रखते हैं है। मेरा मानना है कि 'विकल्प' को गतिशील रूप से 'फ़िल्टर किया जाना चाहिए'। यही सवाल है कि सवाल क्या है। – Pannu
@ पन्नू: नहीं, यह वास्तव में सही समाधान के करीब है, लेकिन इस विशेष समस्या को हल करने के लिए आपको प्रश्न में आमंत्रण के उदाहरण की आवश्यकता है। – DrMeers
आप शायद की तर्ज पर कुछ चाहते हैं:
class InviteAdmin(admin.ModelAdmin):
def get_form(self, request, obj=None, **kwargs):
self.instance = obj # Capture instance before the form gets generated
return super(InviteAdmin, self).get_form(request, obj=obj, **kwargs)
def formfield_for_manytomany(self, db_field, request=None, **kwargs):
if db_field.name == 'role' and self.instance:
# restrict role queryset to those related to this instance:
kwargs['queryset'] = self.instance.event.roles.all()
return super(InviteAdmin, self).formfield_for_manytomany(
db_field, request=request, **kwargs)
सवाल स्पष्ट रूप से कहते हैं कि निश्चित रूप से गतिशील किया जा रहा है (AJAX) "कैसे मैं केवल घटना मैं गया है ** चयनित ** ** परिवर्तन प्रपत्र ** में साथ जुड़े भूमिकाओं दिखा सकते हैं"। आपका समाधान स्थिर है। – Pannu
आह, मैंने उस विवरण को याद किया, धन्यवाद। मैं जरूरी यह एक * स्थिर * समाधान के रूप में यह वस्तु भरी हुई और घटना डेटाबेस में चयनित के आधार पर भिन्न फोन नहीं होगा, लेकिन मुझे लगता है कि आप सही इस समस्या का समाधान नहीं करता है * वास्तव * प्रस्तुत किया जा रहा हो :) – DrMeers
मेरा मानना है कि वहाँ इस के हल के लिए दो तरीके हैं:
ajax विधि के रूप में @Pannu
द्वारा वर्णितगैर-AJAX विधि जो प्राप्त की जा सकती है डी
event
फ़ील्ड को बदलने के फॉर्म के बाहर ले जाकर (जिसका अर्थ है किevent
बदलने के लिए एक और रूप होगा) और वर्तमानevent
पर आधारितroles
फ़िल्टर करना। मुझे विशिष्ट साइट पर ऑब्जेक्ट से संबंधित उपलब्ध विकल्पों को सीमित करने के साथ हाल ही में इसी तरह की समस्या को हल करना पड़ा। http://source.mihelac.org/2011/09/8/django-sites-ext/
- 1. Django ManyToMany फिल्टर()
- 2. Django manytomany सत्यापन
- 3. Django ManyToMany मॉडल सत्यापन
- 4. टेम्पलेट प्रारूप में Django Manytomany
- 5. एक बेहतर Django व्यवस्थापक ManyToMany फील्ड विजेट
- 6. django ManyToMany मदद के माध्यम से
- 7. Django - manytomany पर क्वेरी फिल्टर खाली
- 8. ManyToMany
- 9. पुनरावर्ती ManyToMany
- 10. Postgres FK समग्र पी
- 11. MySQL FK तालिका
- 12. ManyToMany टेबल
- 13. मानचित्रण ManyToMany:
- 14. सीमा चयनित सूची की प्रारंभिक चौड़ाई
- 15. दो शून्य के FK के
- 16. अतिरिक्त क्षेत्रों के साथ Django के ManyToMany रिश्ते
- 17. Django ManyToMany रिश्ते के 'रिवर्स' का उपयोग कैसे करें?
- 18. स्केपर Django सीमा लिंक क्रॉल
- 19. django व्यवस्थापक इनलाइन क्वेरीसेट सीमा
- 20. Symfony2-Doctrine: ManyToMany संबंध डेटाबेस
- 21. हाइबरनेट @ManyToMany संबंध हटाएं
- 22. @OneToMany और @ManyToMany
- 23. Doctrine2 ManyToMany स्व संदर्भित
- 24. सिद्धांत 2 ManyToMany कैस्केड
- 25. @ManyToMany (mappedBy = "foo")
- 26. ऑल्टर तालिका डिफ़ॉल्ट मान और FK, कि मूल्य नहीं FK संदर्भ डाटा
- 27. pyqt में qtablewidget में चयनित सेल की सीमा छुपाएं?
- 28. Django Celery समय सीमा पार हो गई?
- 29. Django
- 30. चयनित डाउनडाइंड चयनित चयनित मूल्य पर चयनित मान
नहीं, यह पायथन कोड में (और चाहिए) हासिल किया जा सकता है। – DrMeers
समाधान को जावा स्क्रिप्ट की आवश्यकता होती है क्योंकि जब वह फॉर्म में 'ईवेंट' चुनता है तो भूमिकाओं को गतिशील रूप से फ़िल्टर किया जाना चाहिए (बिना बटन दबाए, पूरे फॉर्म को सबमिट करना और फिर फ़िल्टर किए गए विकल्पों के साथ वापस आना) इसलिए 'अजैक्स' तरीका है चले जाओ। – Pannu
हां, यदि आप विजेट में चयनित ईवेंट को बदलते समय ब्राउज़र में बदलना चाहते हैं, तो निश्चित रूप से आपको जावास्क्रिप्ट का उपयोग करने की आवश्यकता है। क्षमा करें, मैं गलत पढ़ता हूं। – DrMeers