2009-11-09 9 views
7

सबसे पहले मैं यह निर्धारित करूँगा कि मैं इसके बारे में जाने का एक अलग तरीका होने पर क्या हासिल करने की कोशिश कर रहा हूं!व्यवस्थापक में एम 2 एम के दोनों किनारों को संपादित करना

मैं किसी भी बहु चयन इंटरफेस का उपयोग करके एम 2 एम रिलेशनशिप के दोनों पक्षों को संपादित करने में सक्षम होना चाहता हूं (अधिमानतः व्यवस्थापक पृष्ठ पर हालांकि यदि यह सामान्य पृष्ठ पर हो सकता है)।

समस्या स्पष्ट रूप से विपरीत पक्ष के साथ आता है, क्योंकि मुख्य पक्ष (जहां संबंध परिभाषित किया गया है) केवल स्वचालित रूप से ठीक काम करता है।

मैंने उपस्थित होने के लिए इनलाइन प्राप्त करने के लिए यहां कुछ सलाह दी है और यह काम करता है लेकिन यह एक बहुत अच्छा इंटरफ़ेस नहीं है।

डीजेंगो मेलिंग सूची पर मिली सलाह मुझे कस्टम मॉडलफॉर्म का उपयोग करना था। मुझे दिखाई देने के लिए एक बहुविकल्पीय बॉक्स मिल गया है, लेकिन ऐसा लगता है कि यह किसी भी चीज़ से "कनेक्ट" नहीं होता है क्योंकि यह किसी भी चीज से शुरू नहीं होता है और किए गए किसी भी बदलाव को सहेजता नहीं है।

यहाँ कोड का उचित के टुकड़े है:

#models.py 
class Tag(models.Model): 
    name = models.CharField(max_length=200) 

class Project(models.Model): 
    name = models.CharField(max_length=200) 
    description = models.TextField() 
    tags = models.ManyToManyField(Tag, related_name='projects') 

#admin.py 
class TagForm(ModelForm): 
    fields = ('name', 'projects') 
    projects = ModelMultipleChoiceField(Project.objects.all(), widget=SelectMultiple()) 
    class Meta: 
     model = Tag 

class TagAdmin(admin.ModelAdmin): 
    fields = ('name', 'projects') 
    form = TagForm 

किसी भी मदद की बहुत सराहना की जाएगी, या तो काम करने के लिए ऊपर दिए गए कोड को प्राप्त करना या ऐसा करने का एक बेहतर तरीका प्रदान करके!

Davidm

+1

वाह, दोस्ताना लोग यहां, 11 मिनट और 2 वोट वोट! – DavidM

उत्तर

2

कारण है कि कुछ भी नहीं है अपने आप होता है कि "परियोजनाओं" मैदान टैग मॉडल का एक हिस्सा नहीं है। जिसका मतलब है कि आपको खुद को सभी काम करना है। (TagForm में) की तरह कुछ:

def __init__(self, *args, **kwargs): 
    super(TagForm, self).__init__(*args, **kwargs) 
    if 'instance' in kwargs: 
     self.fields['projects'].initial = self.instance.project_set.all() 

def save(self, *args, **kwargs): 
    super(TagForm, self).save(*args, **kwargs) 
    self.instance.project_set.clear() 
    for project in self.cleaned_data['projects']: 
     self.instance.project_set.add(project) 

ध्यान दें कि कोड ताकि आप इसे कुछ यह काम करने के लिए प्राप्त करने के लिए tweek की जरूरत हो सकती अपरीक्षित है।

+0

ऐसा लगता है कि यह चाल धन्यवाद हो सकता है, लेकिन मुझे इसके साथ समस्या हो रही है। 'उदाहरण' kwargs में मौजूद है लेकिन प्रारंभिक सेटिंग का कोई प्रभाव नहीं पड़ता है। परीक्षण करने के लिए मैंने self.fields ['name'] को सेट करने का प्रयास किया। प्रारंभिक = 'परीक्षण' और यह इंटरफ़ेस पर भी दिखाई नहीं देता है। – DavidM

+0

मैं इसे उत्तर के रूप में चिह्नित करूंगा और इसके साथ मिलकर रहूंगा। अगर मैं इसे हल करता हूं तो मैं यहां जवाब पोस्ट करूंगा। धन्यवाद! – DavidM

संबंधित मुद्दे