【问题标题】:Calling function when model is called by django-admindjango-admin 调用模型时的调用函数
【发布时间】:2010-09-27 13:27:16
【问题描述】:

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

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 中有 varchoices_limit。我想让它动态化,以允许某些用户根据他们的权限拥有不同的选项。我可以通过函数 prepare_choices_limit() 来完成。问题是:如果整个想法是好的,如果不是,如何以不同的方式实现这种效果?或者,如果它很好,每次用户登录到管理面板时我怎么能调用这个函数。我不希望每次调用模型时都调用它,因为我不需要为站点的普通用户进行权限检查,只为管理员进行。

提前致谢 米哈乌

【问题讨论】:

    标签: django django-models django-admin


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-16
      • 2010-11-22
      • 2011-01-03
      • 2017-08-26
      • 1970-01-01
      相关资源
      最近更新 更多