¿Cómo puedo hacer que el valor predeterminado para un campo se tome de los objetos existentes de un modelo?Django: valor predeterminado del campo de las instancias del modelo propio
he probado todas estas y no me funcionó:
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
que está claro por qué 3) y 4) no funcionará. Me imagino por qué 1) no funcionará - parece que las propiedades de la clase no pueden referirse a las instancias (es decir, a uno mismo). Me imagino por qué 2) no funcionará, aparentemente no hay ninguna referencia a ModelA hasta que el intérprete pase por toda la clase.
Entonces, ¿cómo debo abordar esto?
¡Buen punto! En mi caso, aunque tengo muchos campos para obtener el valor predeterminado, necesitaría una función separada para cada uno. (Pero consideraré usar lambda para generalizar esto, algo así como 'lambda: get_default ('field_name')') – grucha
Equivalentemente, debería poder hacer 'default = lambda: ModelA.objects.all() [0]. fieldA'. –
Tenga en cuenta que el uso de una función lambda por defecto interferirá con las migraciones ya que las funciones lambda no se pueden serializar. – Ironbeard