2012-10-25 25 views
14

में मॉडल बनाने के लिए मैंने django-mutant 0.0.2 (django 1.4.2 पर) प्रयोग करना शुरू किया, लेकिन दस्तावेज़ीकरण की कमी के कारण मुझे लगभग कहीं नहीं मिला। जिस तरह से मैं प्रोजेक्ट विवरण से समझता हूं, मैं इसे अपने मॉडल को गतिशील रूप से बनाने के लिए उपयोग कर सकता हूं, इसलिए मैंने सोचा कि मैं इसे django-admin इंटरफ़ेस से तार कर सकता हूं, इसलिए मैं मॉडल बना सकता हूं और वहां अपने सभी फ़ील्ड को परिभाषित कर सकता हूं। मैंने django-eav, dynamo, विल हार्डी के dynamic-models इत्यादि जैसे कुछ अन्य विकल्पों को देखा, लेकिन ऐसा लगता है कि अब तक यह सबसे अच्छा कार्यान्वयन है, इसलिए मैंने सोचा कि मुझे इसका उपयोग करना चाहिए।django-mutant django-admin

मैं settings.py में इस डाल दिया है:

INSTALLED_APPS = (
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.sites', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'django.contrib.admin', 
    'south', 
    'polymodels', 
    'mutant', 
    'mutant.contrib.boolean', 
    'mutant.contrib.temporal', 
    'mutant.contrib.file', 
    'mutant.contrib.numeric', 
    'mutant.contrib.text', 
    'mutant.contrib.web', 
    'mutant.contrib.related', 
    'dynamodels' # this is the name of my testapp 
) 

मैं django-mutant के स्रोत खोल दिया मुझे क्या करना चाहिए यह पता लगाने की है, और मैंने सोचा कि यह मेरे admin.py में mutant.models.ModelDefinition और mutant.models.FieldDefinition आयात और रजिस्टर करने के लिए काफी है उन्हें, इसलिए मैं इस कोशिश की:

from django.contrib import admin 

from mutant import models 


class ModelDefinitionAdmin(admin.ModelAdmin): 
    pass 

admin.site.register(models.ModelDefinition, ModelDefinitionAdmin) 


class FieldDefinitionAdmin(admin.ModelAdmin): 
    pass 

admin.site.register(models.FieldDefinition, FieldDefinitionAdmin) 

एक syncdb के बाद, मैं इसे चलाने मिल गया, और मैं अपने व्यवस्थापक इंटरफ़ेस में एक "उत्परिवर्ती" खंड है, इसके अंदर एक "मॉडल परिभाषा" और "क्षेत्र"। मैंने एक मॉडल सफलतापूर्वक जोड़ा, हालांकि मैं INSTALLED_APPS की सूची में मौजूद किसी भी ऐपनाम को निर्दिष्ट नहीं कर सका। एक फ़ील्ड जोड़ना बुरी तरह विफल रहा, क्योंकि यह Model def पैरामीटर है, मैंने पहले बनाया गया मॉडल चुन लिया था (यह सूची में केवल एक ही था), और मैंने Content type के लिए "इंटीजर फील्ड परिभाषा" चुना था। बचाने के बटन दबाने से मुझे इस दिया:

NotImplementedError at /admin/mutant/fielddefinition/add/ 

No exception supplied 
... 
... 
/home/user/dev/virenvs/dynamicmodels/lib/python2.6/site-packages/django_mutant-0.0.2-py2.6.egg/mutant/models/field/__init__.py in save 
     return super(FieldDefinition, self).save(*args, **kwargs) ... 

/home/user/dev/virenvs/dynamicmodels/lib/python2.6/site-packages/django_polymodels-1.0.1-py2.6.egg/polymodels/models.py in save 
     return super(BasePolymorphicModel, self).save(*args, **kwargs) ... 

/home/user/dev/virenvs/dynamicmodels/lib/python2.6/site-packages/django_mutant-0.0.2-py2.6.egg/mutant/models/model/__init__.py in save 
     self.model_def.model_class(force_create=True) ... 

/home/user/dev/virenvs/dynamicmodels/lib/python2.6/site-packages/django_mutant-0.0.2-py2.6.egg/mutant/models/model/__init__.py in model_class 
      model_class = self._create_model_class(existing_model_class) ... 

/home/user/dev/virenvs/dynamicmodels/lib/python2.6/site-packages/django_mutant-0.0.2-py2.6.egg/mutant/models/model/__init__.py in _create_model_class 
     attrs = self.get_model_attrs(existing_model_class) ... 

/home/user/dev/virenvs/dynamicmodels/lib/python2.6/site-packages/django_mutant-0.0.2-py2.6.egg/mutant/models/model/__init__.py in get_model_attrs 
          for f in self.fielddefinitions.select_subclasses())) ... 

/home/user/dev/virenvs/dynamicmodels/lib/python2.6/site-packages/django_mutant-0.0.2-py2.6.egg/mutant/models/model/__init__.py in <genexpr> 
          for f in self.fielddefinitions.select_subclasses())) ... 

/home/user/dev/virenvs/dynamicmodels/lib/python2.6/site-packages/django_mutant-0.0.2-py2.6.egg/mutant/models/field/__init__.py in field_instance 
     cls = self.get_field_class() ... 

/home/user/dev/virenvs/dynamicmodels/lib/python2.6/site-packages/django_mutant-0.0.2-py2.6.egg/mutant/models/field/__init__.py in get_field_class 
      raise NotImplementedError 

तो यह रास्ता मैं अपने क्षेत्र (या यहां तक ​​कि मॉडल?) परिभाषित करना चाहिए .. परियोजना के पृष्ठ पर नहीं हो सकता है वहाँ एक टुकड़ा जो FieldDefinition वर्ग उपवर्गों है, बनाने एक डेटफिल्ल्डडिफिनिशन, अगर मैंने अपने स्निपेट को models.py में रखा है और मेरे व्यवस्थापक में उस श्रेणी को पंजीकृत किया है, तो मैं किसी भी प्रकार के फ़ील्ड को सफलतापूर्वक जोड़ सकता हूं। क्या इसका मतलब है कि मुझे उन सभी प्रकार के वर्गों को उप-वर्ग करना होगा जिन्हें मैं व्यवस्थापक में बनाने में सक्षम होने के लिए उपयोग करना चाहता हूं? क्या वे वास्तव में मेरे मॉडल से बंधे हैं जब मैं उन्हें इस तरह से बना देता हूं? कम से कम मूल बातें दिखाने के लिए कहीं कोई कामकाजी उदाहरण है? क्षमा करें यह सबसे छोटा संस्करण था जिसके साथ मैं आया था, किसी भी सुझाव की सराहना की जाएगी।

अद्यतन: मैं संस्करण मैं कोशिश कर रहा था निर्दिष्ट करने में एक गलती की है, मैं नवीनतम डेवलपर संस्करण के लिए NotImplementedError (जो वैसे भी 0.0.2 है) मिल गया, लेकिन जब मैं वास्तविक 0.0 की कोशिश की। 2 पाईपी से उसी तरह से मिलता है जैसे देव, मुझे त्रुटि-संदेश के बिना फॉर्म-त्रुटि मिली, लेकिन कुछ निश्चित रूप से सत्यापन में विफल रहा। तो आम तौर पर मैं समाधान के करीब नहीं हूं।

UPDATE2:

from django.contrib import admin 

from mutant import models 

for field_type in models.FieldDefinitionBase._field_definitions.values(): 
    attrs = {'model': field_type} 
    FieldDefAdmin = type('{0}Admin'.format(field_type.__name__), 
         (admin.ModelAdmin,), 
         attrs) 
    admin.site.register(field_type, FieldDefAdmin) 


class ModelDefinitionAdmin(admin.ModelAdmin): 
    model = models.ModelDefinition 

admin.site.register(models.ModelDefinition, ModelDefinitionAdmin) 

लेकिन जब मैं का निरीक्षण: मैं व्यवस्थापक में गतिशील रूप से उत्परिवर्ती के आधार फ़ील्ड प्रकार पंजीकृत है, और मैं अब जोड़ने/परिवर्तन/मॉडल और खेतों इस व्यवस्थापक स्निपेट के साथ हटाना सक्षम हूँ उदाहरण के लिए mysql कंसोल से मेरे डेटाबेस में वास्तविक डेटा, मेरी तालिका डेटाबेस में मौजूद नहीं है। उत्परिवर्ती टेबल हैं, और उनमें मेरे मॉडल और मेरे फ़ील्ड के बारे में प्रविष्टियां हैं, लेकिन मैंने सोचा कि गतिशील मॉडल वर्ग का निर्माण होने के बाद, यह डेटाबेस के रूप में भी लिखा जाएगा।

Update3: असल में मैं गलत था, टेबल मेरी डेटाबेस में पाया जाता है, यह सिर्फ के साथ "mutant_" इसलिए मैं नहीं पहचाना वहाँ पहले से जुड़ा हुआ है।ऐसा लगता है कि यह इसके साथ काम करने के लिए एक वैध विधि होगी, हालांकि इसके साथ काम करने के लिए एक सभ्य उपयोगकर्ता के अनुकूल इंटरफेस बनाने के लिए और अधिक काम की आवश्यकता होगी।

+9

अपने खुद के सवाल का जवाब दें। धन्यवाद – n3storm

+0

हाय एंड्रान, आपके काम अब तक कैसे चल रहे हैं? क्या आप एक काम कर रहे उदाहरण साझा कर सकते हैं जो django-mutant का उपयोग करता है? –

+0

मैं उत्परिवर्ती के लिए एक सीआरयूडी इंटरफ़ेस पर काम कर रहा हूं, लेकिन दुर्भाग्य से मेरे काम पक्ष परियोजनाओं के लिए बहुत कम समय छोड़ देता है। जैसे ही मेरे पास एक कामकाजी प्रोटोटाइप है, मैं इसे साझा करूंगा। – andrean

उत्तर

5

ठीक है, मुझे खेद है, लेकिन मैं एक सभ्य ऐप को पूरा करने के लिए बहुत व्यस्त हूं (और शायद अधिक आलसी) हूं। लेकिन कम से कम थोड़ा सा मदद करने के लिए, मैंने विषय के बारे में एक गंदे ब्लॉग पोस्ट बनाया है, और उत्परिवर्ती के लिए एक नमूना सीआरयूडी ऐप जोड़ा है, लेकिन सावधान रहें, यह वास्तव में वास्तव में बुनियादी है, केवल उठने और चलाने के पहले कुछ चरणों का प्रदर्शन करने के लिए।

http://integricho.github.io/2013/07/22/mutant-introduction/

https://github.com/integricho/mutant-sample-app