49

क्या डीजेंगो को यह बताने का एक तरीका है कि एक मॉडल सामग्री सामग्री है जेनेरिकॉर्निनेकी केवल एक पूर्वनिर्धारित सूची से मॉडल को इंगित कर सकता है? उदाहरण के लिए, मेरे पास 4 मॉडल हैं: ए, बी, सी, डी और एक मॉडल एक्स जिसमें जेनेरिक फोरिनेकी है। क्या मैं एक्स को बता सकता हूं कि GenericForeignKey के लिए केवल A & बी की अनुमति है?मैं Django की GenericForeignKey को मॉडलों की सूची में कैसे प्रतिबंधित कर सकता हूं?

उत्तर

93

उदाहरण के लिए, आपके ऐप्स ऐप और ऐप 2 हैं और ऐप में ए, बी मॉडल हैं और ऐप 2 में सी, डी मॉडल हैं। आप ForeignKey पर केवल app.A और app.B और app2.C

class TaggedItem(models.Model): 
     tag = models.SlugField() 
     limit = models.Q(app_label = 'app', model = 'a') | models.Q(app_label = 'app', model = 'b') | models.Q(app_label = 'app2', model = 'c') 
     content_type = models.ForeignKey(ContentType, limit_choices_to = limit) 
     object_id = models.PositiveIntegerField() 
     content_object = generic.GenericForeignKey('content_type', 'object_id') 

उपयोग limit_choices_to देखना चाहते हैं।

विवरण और क्यू ऑब्जेक्ट्स, app_label के लिए django दस्तावेज़ों की जांच करें। आपको उचित app_label और मॉडल लिखने की आवश्यकता है। यह सिर्फ कोड स्निपेट

प्लस: मुझे लगता है कि आप गलत app_label लिखते हैं। यह आपकी मदद कर सकता है।

from django.contrib.contenttypes.models import ContentType 
    for c in ContentType.objects.all(): 
     print(c.app_label, c.model) 
+0

लेकिन, व्यवस्थापक इंटरफ़ेस इसका उपयोग क्षेत्र के लिए इसका उपयोग नहीं करता है। ऐसा क्यों है? – Geo

+0

मैंने इसे व्यवस्थापक पक्ष पर चेक किया और यह अपेक्षित के रूप में डिफ़ॉल्ट व्यवस्थापक के साथ काम करता है। हो सकता है कि आपने वहां कुछ छोटा टाइपो किया हो। मुझे आपकी समस्या नहीं पता। – mumino

+0

मेरे व्यवस्थापक पर, जब मैं आपकी सीमा जोड़ता हूं, जेनेरिक फॉर्निनेकी के चयन से विकल्प गायब हो जाते हैं। मैं केवल "---" के साथ छोड़ दिया गया है। क्या आप अपने व्यवस्थापक के चयन विकल्पों के साथ एक स्क्रीनशॉट पोस्ट कर सकते हैं? – Geo

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

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