我有一个在我的公司全球使用的应用程序。它用于跟踪内部硬件库存。每个产品都与一个类别相关联(例如,一个产品可以有一个“电缆”或“开发套件”或“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
是否可以修改上述脚本以允许筛选与用户所在位置相同的产品类别(通过请求对象)?
注意:超级用户应该能够看到所有产品类别
任何建议都将不胜感激,因为这只是我正在为这个应用程序进行的大型更新的一小部分
暂无答案!
目前还没有任何答案,快来回答吧!