2010-09-27 49 views
0

叫我有這樣的事情在我的模型:調用函數時,模型是由Django的管理員

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 

正如你可以看到我有變種choices_limit在我的ManyToManyField。我想讓它變成動態的,以允許某些用戶根據他們的權限有不同的選項。我可以通過函數prepare_choices_limit()來完成。問題是:如果這個想法很好,而且它不是如何以不同的方式實現這個效果呢?或者,如果它很好,每次用戶登錄到管理面板時如何調用此功能。我不希望每次調用Model都調用它,因爲我不需要爲管理員的普通用戶進行權限檢查。

在此先感謝 米哈爾

回答

0
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) 
+0

一些修改後,它完美的作品:) tyvm – inc0 2010-09-30 07:42:28