में मॉडल बनाने के लिए मैंने 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_" इसलिए मैं नहीं पहचाना वहाँ पहले से जुड़ा हुआ है।ऐसा लगता है कि यह इसके साथ काम करने के लिए एक वैध विधि होगी, हालांकि इसके साथ काम करने के लिए एक सभ्य उपयोगकर्ता के अनुकूल इंटरफेस बनाने के लिए और अधिक काम की आवश्यकता होगी।
अपने खुद के सवाल का जवाब दें। धन्यवाद – n3storm
हाय एंड्रान, आपके काम अब तक कैसे चल रहे हैं? क्या आप एक काम कर रहे उदाहरण साझा कर सकते हैं जो django-mutant का उपयोग करता है? –
मैं उत्परिवर्ती के लिए एक सीआरयूडी इंटरफ़ेस पर काम कर रहा हूं, लेकिन दुर्भाग्य से मेरे काम पक्ष परियोजनाओं के लिए बहुत कम समय छोड़ देता है। जैसे ही मेरे पास एक कामकाजी प्रोटोटाइप है, मैं इसे साझा करूंगा। – andrean