Ich habe ein Problem mit dem Aufruf einer property()
innerhalb einer dynamic model in Django. Ich brauche ein zusätzliches Feld, das mir einen log-transformierten Wert eines vorhandenen Feldes einer Datenbanktabelle gibt. Zur weiteren Verarbeitung muss das Feld über die Modellstruktur zugänglich sein. Der Name der Datenbanktabelle wird zur Laufzeit definiert, so dass ich ein dynamisches Modell benötige.Wie kann man die Eigenschaftsmethode in einem dynamischen Django-Modell aufrufen?
Das ist meine Bestimmung des Modells:
def create_model(self, name, libs=None, app_label='gotool', module='', options=None, admin_opts=None):
fields = {
'database_id': models.CharField(max_length=255, primary_key=True),
'description': models.TextField(blank=True),
'l1_normalized': models.FloatField(null=True, blank=True),
'l2_normalized': models.FloatField(null=True, blank=True),
'pvalue': models.FloatField(null=True, blank=True),
'log2fc': models.FloatField(null=True, blank=True),
'goterm': models.TextField(db_column='GOTerm', blank=True),
'_get_l1_logcount': lambda self: numpy.log10(self.l1_normalized),
# here is my problem:
'l1_s_logcount': property(_get_l1_logcount), # I don't know how to call the property-method inside the dynamic model definition
}
class Meta:
pass
if app_label:
setattr(Meta, 'app_label', app_label)
if options is not None:
for key, value in options.iteritems():
setattr(Meta, key, value)
attrs = {'__module__': module, 'Meta': Meta}
if fields:
attrs.update(fields)
model = type(name, (models.Model,), attrs)
if admin_opts is not None:
class Admin(admin.ModelAdmin):
pass
for key, value in admin_opts:
setattr(Admin, key, value)
admin.site.register(model, Admin)
return model
Vielen Dank für Ihre Hilfe!