/ / Aufruffunktion, wenn das Modell von django-admin aufgerufen wird - django, django-models, django-admin

Aufruf der Funktion, wenn das Modell von django-admin aufgerufen wird - django, django-models, django-admin

Ich habe so etwas in meinem Modell:

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

Wie Sie sehen können, habe ich var selection_limit in meinemManyToManyField. Ich möchte es dynamisch gestalten, damit bestimmte Benutzer je nach ihren Berechtigungen unterschiedliche Optionen haben. Ich kann dies mit den Funktionen prepare_choices_limit () tun. Die Frage ist: ob diese ganze Idee gut ist und ob es nicht so ist, wie man diesen Effekt erzielt Oder wenn es gut ist, wie kann ich diese Funktion jedes Mal aufrufen, wenn sich ein Benutzer im Admin-Bereich anmeldet? Ich möchte nicht, dass sie jedes Mal aufgerufen wird, wenn Model aufgerufen wird, da ich keine Berechtigungsprüfung für normale Benutzer der Site durchführen muss für Administratoren.

Danke im Voraus Michał

Antworten:

0 für die Antwort № 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)