1.Django admin model 設置查看權限
Django model 默認只有增加、刪除、修改權限。沒有查看權限
#model class Ad_Campaing(models.Model): TEST_CHANNEL = ( ('adx-1', '渠道1'), ('adx-2', '渠道2'), ('adx-3', '渠道3'), ('adx-4', '渠道4'), ('adx-5', '渠道5'), ('adx-no', '不測試') ) AD_CAMPAING_STATUS = ( ('dsh', '待審核'), ('tfz', '投放中'), ('zt', '暫停'), ('ygq', '已過期'), ('yebz', '余額不足'), ('bgdb', '曝光達標'), ('djdb', '點擊達標'), ('ready', '未到開始時間'), ('ysdb', '預算達標') ) name = models.CharField(max_length=200, verbose_name="廣告組名稱", default="") status = models.CharField(max_length=20, verbose_name='廣告組狀態', default="dsh", choices=AD_CAMPAING_STATUS) advertiser = models.ForeignKey(UserProfile, verbose_name='廣告主ID', null=True, blank=True) start_time = models.DateTimeField(verbose_name='開始時間', null=True, blank=True) end_time = models.DateTimeField(verbose_name='結束時間', null=True, blank=True) # budget = models.IntegerField(verbose_name='計划預算', null=False, blank=False, default=0) # pay max_impression = models.IntegerField(verbose_name='最大曝光數', null=True, blank=True) max_click = models.IntegerField(verbose_name='最大點擊數', null=True, blank=True) pay_money = models.IntegerField(verbose_name='消費金額', null=True, blank=True) # for free free_max_impression = models.IntegerField(verbose_name='贈送曝光數', null=False, blank=False, default=0) free_max_click = models.IntegerField(verbose_name='贈送點擊數', null=False, blank=False, default=0) # 不要物理性刪除數據, 如果要刪除某條數據,就將enable置為0 enable = models.IntegerField(verbose_name='是否有效', null=False, blank=False, default=1) unit_price = models.FloatField(verbose_name='單價', default=0.5) weight = models.IntegerField(verbose_name='權重', default=50) permit_min_vername = models.CharField(max_length=20, verbose_name="最小app版本號", default="4.6.7") action = models.IntegerField(verbose_name='跳轉類型', default=1) permit_connect_type = models.CharField(max_length=20, verbose_name="允許跳轉類型", default="[1, 2, 3, 4, 5]") test_channel = models.CharField(max_length=20, verbose_name='測試渠道', default="adx-1", choices=TEST_CHANNEL) finish_percent = models.IntegerField(verbose_name='任務完成率', default=0) add_time = models.DateTimeField(auto_now=True) class Meta: verbose_name = "廣告計划" verbose_name_plural = verbose_name permissions = ( ('view_ad_campaing', 'view_ad_campaing'), )
admin 文件
class Ad_CampaingAdmin(admin.ModelAdmin): """ 廣告計划 """ list_display = ['id', 'name', 'status', 'advertiser', 'weight', 'operate', 'unit_price', 'budget', 'start_time', 'end_time'] # 后台自定義顯示 search_fields = ['id', 'name', 'status', 'advertiser'] # 定義后台搜索 #list_filter = ['id', 'name', 'status', 'advertiser'] # 通過時間搜索 #自定義表格顯示字段 def operate(self, obj): sum_weight = Ad_Campaing.objects.filter(status='tfz').aggregate(Sum('weight')) sum_weight = sum_weight.get('weight__sum') print(sum_weight) if obj.status == 'tfz': try: per_weight = round(float(obj.weight) / float(sum_weight) , 2) except Exception as e: per_weight = 0 else: per_weight = 0 html = '{}'.format(per_weight) return html operate.allow_tags = True operate.short_description = '投放比例' def get_readonly_fields(self, request, obj=None): """ 設置只讀字段 :param request: :param obj: :return: """ # black5.view_ad_campaing black5 為app名字 if not request.user.is_superuser and request.user.has_perm('black5.view_ad_campaing'): return [f.name for f in self.model._meta.fields]