Django模型中外键的动态选择
目前,我在为模型中的字段实现动态选择时遇到了一些困难。所讨论的模型如下Django模型中外键的动态选择,django,django-models,django-rest-framework,Django,Django Models,Django Rest Framework,目前,我在为模型中的字段实现动态选择时遇到了一些困难。所讨论的模型如下 class Item(models.Model): # Fields ... item_type = models.ForeignKey(Type, on_delete=models.PROTECT) 类型模型 class Type(models.Model): # Fields group = models.CharField(max_length=50, editable=Fal
class Item(models.Model):
# Fields
...
item_type = models.ForeignKey(Type, on_delete=models.PROTECT)
类型模型
class Type(models.Model):
# Fields
group = models.CharField(max_length=50, editable=False)
name = models.CharField(max_length=30, help_text="Enter category name")
...
# Methods
def __str__(self):
return str(self.name)
我想限制为该字段返回的类型
的数量。我的每个Type
条目都有一个“group”字段,我只想返回与当前用户所在的组具有相同组的Type
条目。例如,组“g1”中的用户在创建项目时
只能选择组字段中带有“g1”的类型
我已签出
limit\u choices\u to
,但我不确定如何让打开表单的用户组将其传递到limit\u choices\u to
。如果有人能提供建议或任何不同的方法来解决此问题,我们将不胜感激。您可以覆盖默认对象管理器或添加自定义对象管理器。在你的情况下是这样的
class TypesManager(models.Manager):
def get_queryset(self, user_group):
qs = super(TypesManager,self).get_queryset().filter(group_id=user_group.id)
class Type(models.Model):
group = models.ForeignKey(Group, verbose_name='Group')
name = models.CharField(max_length=30, help_text="Enter category name")
# default_manager
objects = TypesManager()
# custom_manager
custom_manager = TypesManager()
# Methods
def __str__(self):
return str(self.name)'
你可以在这里阅读更多关于经理的信息
或者,如果您只想限制特定表单的类型,您可以在表单init中过滤初始数据。您是否可以共享
类型
模型,以及您正在使用的表单
?因此组
是字符域
?这与用户
有什么关系?您将用户的“组”存储在哪里
?我已修改了TypeAdmin的保存模式,并添加了obj.group=request.User.groups.all()[0]。name
,以便在保存任何类型
条目时,组字段将自动由请求用户的组填充。(所有用户都属于最多1个组)。但问题是,如果以后重命名组,则产品
的组
将不会更新。这就是为什么您最好对组
模型使用外键
。然后可以将其设置为obj.group=request.user.groups.first()
,我明白了。我确实忽略了这一点。谢谢你指出这一点。现在假设我将CharField更改为ForeignKey,那么如何根据用户限制Type选项呢?