Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django模型中外键的动态选择_Django_Django Models_Django Rest Framework - Fatal编程技术网

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选项呢?