update type example decimalfield django django-models

example - type models django



¿Puede ser genérico un campo generic.GenericForeignKey() nulo? (4)

¿Has intentado establecer null=True en GenericForeignKey ? Las claves externas genéricas no son un concepto reconocido por la aplicación de base de datos de bajo nivel (es decir, MySQL, SQLite, etc.) por lo que debería poder especificar que el campo sea nulo.

null=True en un campo de base de datos en Django significa que el campo de la base de datos que representa esos datos está vacío, mientras que blank=True le dice a los formularios de Django / validación del modelo que el campo está vacío para dejarlo vacío (o usted, a través de la interfaz de administración). Por lo tanto, es posible que necesite usar ambos para lograr lo que busca.

Estoy creando un objeto que rastrea los cambios (Actualizaciones) con respecto a la creación, actualización y eliminación de otros objetos denominados UUIDSyncable en la base de datos.

Esto implica que cualquier objeto que extienda los UUIDSyncable save() y delete() las clases UUIDSyncable sea ​​reemplazado, de tal forma que cree un nuevo objeto Update models.CharField(max_length=64) la acción (inserte, actualice o elimine) y originalmente un models.CharField(max_length=64) campo que especifica el UUID pk de de los objetos UUIDSyncable .

En este punto, quería actualizar la implementación para usar el campo generic.GenericForeignKey() Django en lugar de mi campo de carácter único. Esto permitiría acceder al objeto sobre el que se está grabando la actualización de una manera mucho más simple.

Mi problema surge cuando desea eliminar un objeto y almacenarlo como un objeto de Update , ya que sabe que Django preforma una eliminación en cascada en el objeto UUIDSyncable que se está eliminando, borrando todos los registros de Update previos (que no se desean).

Cuando el objeto UUIDSyncable se ha eliminado en mi implementación original, cada objeto Update aún conservará el UUID para informar a las partes externas sobre su eliminación. Mi primera solución para emular esto fue establecer content_object = None justo antes de eliminar el objeto en todos los objetos de Update , evitando así la cascada de eliminación.

Considera que generic.GenericForeignKey() no se puede configurar para permitir valores NULL . ¿Hay alguna manera de hacer esto o, de no ser así, cómo se puede utilizar de forma similar un CharField estándar que CharField una clave primaria UUID y un CharField contiene el nombre del modelo?


Lo que dijo Daniel Roseman está bien. Solo asegúrese de actualizar su base de datos para permitir Null en esos campos, ya que puede haber creado la tabla sin configurarla.


Para los perezosos / pragmáticos:

class MyModel(models.Model): ...other fields... content_type = models.ForeignKey(ContentType, blank=True, null=True, on_delete=models.SET_NULL) object_id = models.PositiveIntegerField(blank=True, null=True) content_object = generic.GenericForeignKey(''content_type'', ''object_id'')


Quizás necesite establecer null = True en los campos subyacentes content_type y object_id que conforman la clave externa genérica.