/ / Llamando a la función cuando django-admin llama al modelo - django, django-models, django-admin

Función de llamada cuando django-admin llama al modelo - django, django-models, django-admin

Tengo algo como esto en mi modelo:

class Artykul(models.Model):

id = models.AutoField(max_length = 5, primary_key = True)
tytul = models.CharField(max_length = 255)

kategoria = models.ManyToManyField(Title, limit_choices_to = choices_limit)


dodano = models.DateField(auto_now_add = True)
autor = models.CharField(max_length = 255)
glowny_obrazek = models.ImageField(blank = True, upload_to="uploads/artykul_main_img")

tresc = PlaceholderField("tresc")



def show_categories(self):
return ", ".join( self.kategoria.values_list("title", flat=True) )

def prepare_choices_limit(self):
return {"page__level__exact": 1}

def __unicode__(self):
return self.tytul

Como puede ver, tengo var choice_limit en miManyToManyField. Me gustaría hacerlo dinámico para permitir que ciertos usuarios tengan diferentes opciones en función de sus permisos. Puedo hacerlo mediante las funciones prepare_choices_limit (). La pregunta es: si toda esta idea es buena y si no cómo lograr este efecto en ¿De otra manera? O si es bueno, ¿cómo puedo llamar a esta función cada vez que el usuario inicia sesión en el panel de administración? No quiero que se llame cada vez que se llama a Model, porque no necesito hacer una verificación de permisos para los usuarios normales del sitio, solo para administradores.

Gracias por adelantado Michał

Respuestas

0 para la respuesta № 1
class Artykuladmin(models.ModelAdmin):
def formfield_for_manytomany(self, db_field, request=None, **kwargs):
formfield= super(ArtykulAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)

if request.user.is_superuser:
return formfield

if db_field.name == "kategoria":
#specify your criteria here:
qs = Title.objects.filter(page__level__exact=1)
kwargs["queryset"] = qs

return db_field.formfield(**kwargs)