gpt4 book ai didi

python - 在模型中动态指定 limit_choices_to

转载 作者:太空宇宙 更新时间:2023-11-04 05:16:49 24 4
gpt4 key购买 nike

如果有必要按另一个模型的字段进行限制,您能否帮助我了解限制选择在模型中的工作原理。目前,我有两个模型:

组:

class Group(models.Model):
name = models.CharField(max_length=10, null=True)
leader = models.OneToOneField(
'Student',
related_name='+',
null=True,
blank=True,
on_delete=models.SET_NULL,
limit_choices_to={'group': 2},
)

和学生:

class Student(models.Model):

group = models.ForeignKey(Group, on_delete=models.PROTECT)
name = models.CharField(max_length=140, null=True)
brd_date = models.DateField(null=True)
ticket = models.IntegerField(null=True, unique=True)

如您所见,每个学生都有自己的组(由 ForeignKey 配置)。但是每个小组可能有也可能没有自己的领导者。它只是从他/她实际所属的组中选出的一个特定学生(由 OneToOneField 配置)。不受组限制,可以选择每个学生作为每个组的组长。在提供的组模型中,我设置了 limit_choices_to 选项以将选择限制为组 2(用于测试目的)。

是否可以动态设置此参数,从而有可能创建基于组模型的表单类,其中组长的选择允许仅选择该特定组中的学生?

提前致谢。

最佳答案

只是想分享适合我的方式。我只是使用 ModelForm 类来限制我的选择:

class GroupForm(ModelForm):

class Meta:
model = Group
fields = '__all__'

def __init__(self, *args, **kwargs):
super(GroupForm, self).__init__(*args, **kwargs)

self.fields['head'].queryset = Student.objects.filter(group=self.instance)

正如您在 .filter(group=self.instance) 的帮助下看到的那样,我可以限制我的选择,并有可能从仅属于该特定组的学生中选择负责人。

然后只是:

class UpdateGroup(LoginRequiredMixin, UpdateView):
model = Group
form_class = GroupForm

我想有一种方法可以在模型级别实现相同的结果,但我还没有找到它。

关于python - 在模型中动态指定 limit_choices_to,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41501615/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com