如何限制在 Django admin 中呈现哪些数据库对象 space

How to limit which database objects are rendered in Django admin space

我有一个 Django 应用程序,用于跟踪我公司的产品库存。

我们已经扩展到多个地点。

现在我的目标是创建多个管理员 space,其中显示的产品受产品位置限制。

我还没有找到任何关于执行此操作的最佳方法的好资源。如有任何建议,我们将不胜感激!

models.py

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_cost = models.DecimalField(
        max_digits=5,
        decimal_places=2,
        null = True
    )
    current_qty = models.IntegerField(
        null=False
    )
    obsolete = models.BooleanField(
        null=True
    )
    fk_location_name = models.ForeignKey(
        dboinv_location,
        verbose_name="Location name",
        default='Boston',
        on_delete=models.CASCADE,
        null=True,
        blank=True
    )

Admin.py

@admin.register(dboinv_product)
class dboinv_productAdmin(admin.ModelAdmin):
    form = CreateProductForm
pass

例如,如果用户要去 'Boston/admin',他们应该只能看到 'fk_location_name' = 'Boston'

的产品

注意:我想为自己保留原来的管理员 space,但我会单独制作一个 URL,这样网站就没有 link

我在 django admin 中了解到一个方法 get_queryset(self, request)

用 OneToOne 关系扩展用户模型后,我可以将位置与用户相关联,并使用请求对象查看用户位置,并使用 get_queryset 方法定制查询集以匹配位置