如何基于用户自定义过滤器

a1o7rhls  于 2021-08-20  发布在  Java
关注(0)|答案(0)|浏览(209)

我有一个在我的公司全球使用的应用程序。它用于跟踪内部硬件库存。每个产品都与一个类别相关联(例如,一个产品可以有一个“电缆”或“开发套件”或“pc外围设备”类别)。
现在,每个类别都与一个位置相关联(例如“波士顿”、“布达佩斯”等等)。
我在django中扩展了用户模型,允许一个位置与每个管理员用户关联。
我想在管理空间中为每个用户创建一个下拉列表过滤器。用户应该能够按产品类别进行筛选,但只能筛选与用户位置相同的类别。
models.py


## product model

class dboinv_product(models.Model):
    pk_product_id = models.UUIDField(
        default = uuid.uuid4,
        primary_key=True,
        null=False
    )
    product_creation_time = models.DateTimeField(
        auto_now_add=True,
        null=True
    )
    product_name = models.CharField(
        max_length=50,
        null=False
    )
    product_description = models.CharField(
        max_length=500,
        null=True
    )

    current_qty = models.IntegerField(
        null=False
    )

    fk_location_name = models.ForeignKey(
        dboinv_location,
        verbose_name="Location name",
        default='Boston',
        on_delete=models.CASCADE,
        null=True,
        blank=True
    )
    fk_product_category = models.ForeignKey(
        dboinv_product_category,
        verbose_name='Product category',
        on_delete=models.CASCADE,
        null=True,
        blank=True
    )
    def __str__(self):
        return f"{self.product_name}, {self.fk_location_name}"

    class Meta:
        db_table = "dboinv_product"
        verbose_name = "Product"
        managed = True

## category model

class dboinv_product_category(models.Model):
    pk_category_id =  models.UUIDField(
        default = uuid.uuid4,
        primary_key=True,
        null=False
    )
    product_category = models.CharField(
        max_length=30,
        default="WSTK"
    )
    fk_location_name = models.ForeignKey(
        dboinv_location,
        verbose_name="Location name",
        default='Hyderabad',
        on_delete=models.CASCADE,
        null=False
    )

    def __str__(self):
        return self.product_category
    class Meta:
        db_table = "dboinv_product_category"
        verbose_name = "Product categories"
        managed = True

## location model

class dboinv_location(models.Model):
    pk_location_name = models.CharField(
        primary_key=True,
        max_length=50,
        null=False
    )
    location_city = models.CharField(
        max_length=50,
        null=False
    )
    location_country = models.CharField(
        max_length=50,
        null=False
    )

    class Meta:
        db_table = "dboinv_location"
        managed = True
        verbose_name = "Location"
    def __str__(self):
        return self.pk_location_name

## extended user model

class user_profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    user_location = models.ForeignKey(
        dboinv_location,
        verbose_name="User Location",
        default='Boston',
        on_delete=models.CASCADE
    )

    def __unicode__(self):
        return u'Profile of user: %s' % (self.user.username)

    def __str__(self):
        return self.user.username
    class Meta:
        db_table = "user_profile"
        verbose_name =  "User Profile"
        managed = True

在我的admin.py中,我有一个检查用户状态的函数,以确定他们是否可以访问过滤器
管理员

class dboinv_productAdmin(admin.ModelAdmin):
    def get_list_filter(self, request):
        if request.user.is_superuser:
            return ['fk_location_name', 'fk_product_category']
        else:
            return ['fk_product_category']
pass

是否可以修改上述脚本以允许筛选与用户所在位置相同的产品类别(通过请求对象)?
注意:超级用户应该能够看到所有产品类别
任何建议都将不胜感激,因为这只是我正在为这个应用程序进行的大型更新的一小部分

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题