我目前在为模型中的字段实现动态选择时遇到一些困难。有问题的模型如下。
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
的数量。我的每个Type
条目都有一个“组”字段,我只想返回与当前用户所在的组具有相同组的Type
条目。例如,创建Item
时,组“ g1”只能在组字段中选择带有“ g1”的Type
。
我已经签出limit_choices_to
,但是我不确定如何让用户组打开表单,以便将其传递到limit_choices_to
中。如果有人可以提供建议或任何其他方法来解决此问题,将不胜感激。
答案 0 :(得分:0)
您可以覆盖默认对象管理器或添加自定义对象管理器。在您的情况下,将是这样。
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)'
您可以在https://docs.djangoproject.com/en/2.0/topics/db/managers/
上了解有关经理的更多信息或者,如果您只想限制特定表单的类型,则可以使用 init
表单过滤初始数据