繁体   English   中英

我如何基于 Django 中的另一个模型创建新的代理模型?

[英]How do i create a new proxy model based on another model in django?

我有一个名为 transaction 的模型。

class transactions(models.Model):
    id = models.AutoField(primary_key=True)
    date = models.DateTimeField(default=datetime.now, blank=True)
    saleduser = models.ForeignKey('UserData',on_delete=models.CASCADE, related_name='vclouduser_data', blank=True, null=True)
    brand = models.CharField(max_length=50,blank=True)
    type = models.CharField(max_length=50,blank=True)
    quantity = models.DecimalField(blank=True,null=True,max_digits=20,decimal_places=2)
    amount = models.DecimalField(blank=True,null=True,max_digits=20,decimal_places=2)

我需要创建一个总结报告,所以我创建了一个新模型。

class SaleSummary(transactions):
    class Meta:
        proxy = True
        verbose_name = 'Sale Summary'
        verbose_name_plural = 'Sales Summary'

我需要的是我需要将每种类型的总量作为一个新模型。

请帮我解决这个问题。

提前致谢。

这是一个普通模型的代理模型示例,带有一个过滤示例。 我希望这对您有所帮助,您如何创建代理模型以及如何从管理站点的任何模型中过滤特定数据。 您也可以将此应用于您的自定义 API 响应,然后您应该在序列化程序中编写此代码。 祝你好运。

模型.py

class UserModel(AbstractBaseUser):
    """ 
        Purpose: create a custom auth user table
    """

    name = models.CharField('name of user',max_length=256)
    email = models.EmailField('email address', unique=True)
    date_joined = models.DateTimeField('user creation date', auto_now_add=True)
    
    
    is_admin = models.BooleanField('is a admin', default=False)
    is_staff = models.BooleanField('is a staff', default=False)
    is_superuser = models.BooleanField('if a superuser', default=False)
    status = models.ForeignKey(SesameUserStatus, on_delete = models.CASCADE, related_name='sesame_user_status_type', default=2)

    organization = models.ForeignKey(Organization, on_delete = models.CASCADE, related_name='sesame_user_organization_info', default=1)  

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['name']

    

    def has_perm(self,prm,obj=None):
        return self.is_active and self.is_admin

    def has_module_perms(self,app_level):
        return self.is_active and self.is_admin

    def __str__(self):
        return f'{self.name} // {self.email} // {self.organization.name}' 

    class Meta:
        verbose_name = "User"
        verbose_name_plural = "Users"
        indexes = [
            models.Index(fields=['email']),
        ]



class UserProxyModel(UserModel):
    """ 
        Purpose: create proxy model to visualize only pending user
    """

    class Meta:
        proxy = True
        verbose_name = "Pending User"
        verbose_name_plural = "Pending Users"

################################################## #########################

管理员.py

class UserAdmin(admin.ModelAdmin):
    list_display = ['id', 'name', 'email', 'date_joined', 'is_admin', 'is_staff']   

    class Meta:
        model = UserModel


class UserProxyModelAdmin(admin.ModelAdmin):
    
    list_display = ['id', 'name', 'email', 'date_joined', 'is_admin', 'is_staff', 'organization', 'status']   

    
    def get_queryset(self, request):
        qs = super().get_queryset(request) 

        if request.user.is_superuser:
            return qs.filter(status=SESAME_USERS["status"]["PENDING"]).order_by('id')  
        return None

    class Meta:
        model = UserProxyModel
        
admin.site.register(UserModel, UserAdmin)  
admin.site.register(UserProxyModel, UserProxyModelAdmin)  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM