django admin调用模型时调用函数

django admin调用模型时调用函数,django,django-models,django-admin,Django,Django Models,Django Admin,我的模型中有这样的东西: 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(a

我的模型中有这样的东西:

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
正如你所看到的,我在我的ManyToManyField中有var选择限制。我想让它成为动态的,允许某些用户根据他们的权限拥有不同的选项。我可以通过函数prepare\u choices\u limit来完成。问题是:如果整个想法是好的,如果不是,如何以不同的方式实现这一效果?或者,如果它是好的,我如何调用这个函数每次用户登录到管理面板。我不希望每次调用模型时都调用它,因为我不需要对站点的普通用户进行权限检查,只需要对管理员进行权限检查

提前谢谢 米查

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)