Tengo un administrador personalizado. Quiero usarlo para objetos relacionados. Encontré use_for_related_fields en documentos. Pero no funciona de la manera que lo usé:¿Cómo usar el administrador personalizado con objetos relacionados?
class RandomQueryset(models.query.QuerySet):
def randomize(self):
count = self.count()
random_index = random.randint(0, count - 1)
return self.all()[random_index]
class RandomManager(models.Manager):
use_for_related_fields = True
def get_query_set(self):
return RandomQueryset(self.model, using=self._db)
def randomize(self):
return self.get_query_set().randomize()
lo usé para un modelo:
>>> post = PostPages.default_manager.filter(image_gallery__isnull=False).distinct().randomize()
y trató de hacer lo mismo con M2M objeto relacionado:
>>> post.image_gallery.randomize()
Obtuvo un error:
AttributeError: 'ManyRelatedManager' object has no attribute 'randomize'
Es es posible usar un administrador personalizado de la manera en que lo hice? Si es así, ¿cómo lo haces funcionar?
Editar
Mis modelos:
class ShivaImage(models.Model, ImageResizing):
image = models.ImageField(upload_to='img')
slide_show = models.BooleanField()
title = models.CharField(max_length=100)
text = models.TextField(max_length=400)
ordering = models.IntegerField(blank=True, null=True)
objects = RandomManager()
class PostPages(models.Model):
image_gallery = models.ManyToManyField(ShivaImage, blank=True,
related_name='gallery',)
# all the other fields...
objects = RandomManager()
actualizado he definido el administrador en ambos modelos. Si entendí bien, 'objects' significa administrador por defecto. Ver ediciones de preguntas, agregué modelos allí. – I159
El _first_ manager definido se convierte en el administrador predeterminado, sin importar si se llama 'objects' o no ... –
Uoo hooo! ¡Funciona! Lo más probable es que haya habido un error muy estúpido. Porque ahora está bien. – I159