quando provo a correre manage.py makemigrations
su Django 1.7, ottengo il seguente errore:Serializzare classmethods in Django 1.7
ValueError: Cannot serialize: <bound method ModelBase.get_default of <class 'printapp.models.JobConfiguration'>>
There are some values Django cannot serialize into migration files.
For more, see https://docs.djangoproject.com/en/dev/topics/migrations/#migration-serializing
Quindi sembra che ci sia un problema con il metodo di get_default
che è definito sulla JobConfiguration
, la cui definizione è rammentano di seguito:
@classmethod
def get_default(cls):
result = cls()
result.save()
return result
Dopo la link that was provided in the error message, sembra che la serializzazione "riferimenti di classe" è una caratteristica supportata.
È un "riferimento di classe" uguale a @classmethod
?
Come si inserisce un "riferimento di classe" nel "livello superiore del modulo"?
Perché i metodi devono essere monitorati dalle migrazioni? Ero sotto il presupposto che le migrazioni sono per gli schemi di database, che tracciano solo il tipo di dati memorizzati, non il tipo di metodi usati da una classe.
È interessante notare: modificare la definizione di get_default
ad un metodo statico ripetuto sotto risolve il problema, ma a costo di dover codificare il JobConfiguration
nomeclasse.
@staticmethod
def get_default():
result = JobConfiguration()
result.save()
return result
(Alcuni contesto:. Questo metodo viene fatto riferimento come JobConfiguration.get_default
dall'interno di una models.OneToOneField(JobConfiguration, default=JobConfiguration.get_default)
con l'effetto di creare un nuovo JobConfiguration per ognuno di questi campi creati)
Appena fuori interesse, cosa ti dà sopra 'JobConfiguration.objects.create()'? È ancora un comando, a malapena più digitato. –
Huh, non avevo capito che il metodo era disponibile. Probabilmente lo cambierò nel mio codice, ma sono comunque interessato a sapere perché il codice non funziona così com'è. – Z1MM32M4N