मेरे पास बेस 64 फ़ील्ड है जो django स्निपेट से कॉपी की गई है।django कस्टम बेस 64 फ़ील्ड माइग्रेट कैसे करें। फ़ील्ड मौजूद नहीं है
https://djangosnippets.org/snippets/1669/
class Base64Field(models.TextField):
"""
https://djangosnippets.org/snippets/1669/
Example use:
class Foo(models.Model):
data = Base64Field()
foo = Foo()
foo.data = 'Hello world!'
print foo.data # will 'Hello world!'
print foo.data_base64 # will print 'SGVsbG8gd29ybGQh\n'
"""
def contribute_to_class(self, cls, name):
if not self.db_column:
self.db_column = name
self.field_name =name+ '_base64'
super(Base64Field, self).contribute_to_class(cls, self.field_name)
setattr(cls, name, property(self.get_data, self.set_data))
def get_data(self, obj):
return base64.decodestring(getattr(obj, self.field_name))
def set_data(self, obj, data):
setattr(obj, self.field_name, base64.encodestring(data))
def deconstruct(self):
ame, path, args, kwargs = super(Base64Field, self).deconstruct()
from pprint import pprint
pprint(vars(self))
return ame, path, args, kwargs
मैं समस्याओं का सामना कर रहा है, जबकि इस क्षेत्र की ओर पलायन उदा
class EmailStatus(models.Model):
attachment = Base64Field(null=True, blank=True, db_column='attachment', name="attachment", verbose_name="attachment")
त्रुटि मैं जबकि पलायन हो रही है
raise FieldDoesNotExist('%s has no field named %r' % (self.object_name, field_name))
django.core.exceptions.FieldDoesNotExist: EmailStatus has no field named u'attachment'
अब मैं क्यों कि क्या हो रहा है देख सकते हैं। लेकिन इसके चारों ओर एक रास्ता नहीं पता लगा सकते हैं। मुझे लगता है कि मुझे deconstruct क्षेत्र में कुछ बदलने की जरूरत हो सकती है। मैंने इसके लिए कई चीजों की कोशिश की है लेकिन उनमें से सभी टूट गए हैं।
उदा। _base64 को हटा रहा है। डेटा को सहेजने और पुनर्प्राप्त करते समय यह काम नहीं करता है।
मैंने माइग्रेशन फ़ाइल में नाम बदलने की कोशिश की जो यह काम नहीं करता है।
class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(name='EmailStatus',
fields=[('attachment', gradsite.gradnotes.models.Base64Field(blank=True, null=True)),])]
मुझे लगता है कि माइग्रेशन ऑटो-डिटेक्टर contribute_to_class में नाम में परिवर्तन के कारण भ्रमित हो रहा है। मुझे यकीन नहीं है कि चारों ओर एक काम क्या हो सकता है।
कृपया जांचें कि contribute_to_class, get_data और अन्य विधियां कक्षा 6464 के अंदर हैं या नहीं। – MicroPyramid
वे कक्षा – Akamad007
के अंदर हैं मैंने एक उत्तर दिया है, क्या यह आपकी मदद करता है? –