Django admin -基于相关父模型的属性选项



我有一个父类和一个子类。它们之间的关系是多对一的:

class Parent(AccessmanagerMixin, models.Model):
name = models.CharField(max_length=150)
def __str__(self) -> str:
return self.name
class Child(AccessmanagerMixin, models.Model):
name = models.CharField(max_length=150)
parent_group = models.ForeignKey(Parent, on_delete=models.CASCADE,  null=True )
def __str__(self) -> str:
return self.name

它们都与名为read_users的User类有多对多关系(它是对象级别上的自定义安全性)。

class AccessmanagerMixin(models.Model):
read_users = models.ManyToManyField(User, related_name='read_users')
class Meta:
abstract = True

例如,在管理中,我想使用来自父read_users的用户作为为子实体选择read_users的选项?我怎样才能做到最好呢?我可以在子admin.ModelAdmin.

中重写read_users属性

您可以使用formfield_for_manytomany()方法定义管理站点上的多对多字段显示哪些值。

为子对象显示父对象的read_users的联合示例:

class ChildAdmin(admin.ModelAdmin):
def formfield_for_manytomany(self, db_field, request, **kwargs):
if db_field.name == "read_users":
kwargs["queryset"] = User.objects.filter(pk__in=(list(Parent.objects.values_list("read_users__pk", flat=True))))
return super().formfield_for_manytomany(db_field, request, **kwargs)

查看Django官方文档了解更多细节。

最新更新