django - Django 管理员 | 根据外键关系选择过滤多对多下拉列表
问题描述
我试图找出在具有多对多关系的模型上在 Django Admin 中水平过滤的最佳方法。目标是在 Inline 部分中,当填充一个下拉列表时,将过滤它旁边与第一个下拉列表具有外键关系的下拉列表。
有 TypeSets 和 TypeValues,一个 TypeSet 有很多 TypeValues例如。如果 TypeSet 的类型是“wood”,TypeValue 类型将是 ["oak", "cherry", "walnut"]
然后这些 TypeValues 与“Thing”(以及包含的 TypeSet_id)形成多对多关系
目标是在 Django Admin 中的 ThingTypeInline 创建新事物时,我可以从下拉列表中选择 TypeSet,然后过滤掉它旁边的 TypeValue 下拉列表。
这会是自定义表格吗?
楷模:
class TypeSet(models.Model):
"""TypeSet to be used to describe data type"""
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
type = models.CharField(max_length=255, unique=True)
.....
class TypeValue(models.Model):
"""TypeValue to be used to describe value in the TypeSet"""
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
type = models.CharField(max_length=255)
type_set = models.ForeignKey(
TypeSet,
on_delete=models.CASCADE
)
.......
class Thing(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
types = models.ManyToManyField(
TypeValue, through='ThingType')
..........
class ThingType(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
thing = models.ForeignKey(Locale, on_delete=models.CASCADE)
type_set = models.ForeignKey(TypeSet, on_delete=models.CASCADE)
type_value = models.ForeignKey(TypeValue, on_delete=models.CASCADE)
.......
行政:
class ThingTypeInline(admin.TabularInline):
model = models.ThingType
class ThingAdmin(admin.ModelAdmin):
inlines = [
LocaleTypeInline,
]
解决方案
推荐阅读
- laravel - 如何在 Livewire 中实现日期选择器?
- java - GridBagLayout 忽略锚点
- pylint - 失败标志不适用于 pylint
- java - Android Studio - getBitmap 不工作。返回 null (Java)
- jenkins - BlueOceanCredentialsProvider 问题
- express - 等待 HTTP 请求响应后再卸载
- r - 重复一个函数并对每个输出进行分组
- laravel - 使用 laravel Passport 进行多重身份验证
- python - 显示列名和列索引
- python - 我收到错误“TypeError: argument 1 must be pygame.Surface”,因为我尝试使用 .txt 文件在 2 个 python 代码之间共享一个值