Come è possibile ottenere un valore predefinito per un campo da oggetti esistenti di un modello?Django: valore predefinito del campo dalle istanze del modello stesso
ho provato questi e non ci ha funzionato:
1)
class ModelA(models.Model):
fieldA = models.CharField(default=self.get_previous())
def get_previous(self):
return ModelA.objects.all()[0].fieldA
NameError: name 'self' is not defined
2)
class ModelA(models.Model):
fieldA = models.CharField(default=ModelA.get_previous())
@staticmethod
def get_previous():
return ModelA.objects.all()[0].fieldA
NameError: name 'ModelA' is not defined
3)
class ModelA(models.Model):
fieldA = models.CharField(default=get_previous())
def get_previous():
return ModelA.objects.all()[0].fieldA
NameError: global name 'get_previous' is not defined
4)
def get_previous():
return ModelA.objects.all()[0].fieldA
class ModelA(models.Model):
fieldA = models.CharField(default=get_previous())
NameError: global name 'ModelA' is not defined
mi è chiaro perché 3) e 4) non funzionerà. Posso immaginare perché 1) non funzionerà - sembra che le proprietà di classe non possano riferirsi all'istanza (cioè a se stesso). Posso immaginare perché 2) non funzionerà - apparentemente non c'è riferimento a ModelA finché l'interprete non passerà per l'intera classe.
Quindi, come devo affrontare questo?
Buon punto! Nel mio caso però ho molti campi per ottenere il valore predefinito, quindi avrei bisogno di una funzione separata per ognuno. (Ma considererò l'uso di lambda per generalizzare questo, qualcosa come 'lambda: get_default ('field_name')') – grucha
Equivalentemente, dovresti essere in grado di fare 'default = lambda: ModelA.objects.all() [0]. fieldA'. –
Si noti che l'uso di una funzione lambda per impostazione predefinita farà confusione con le migrazioni poiché le funzioni lambda non possono essere serializzate. – Ironbeard