如果有必要限制另一个模型的字段,请你帮我理解限制选择如何在模型中起作用。 目前,我有两种模式:
组:
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组的选择(用于测试目的)。
是否可以动态设置此参数,因此可以根据组模型创建Form类,其中Group leader的选择只允许选择此特定组中的学生?
提前致谢。
答案 0 :(得分:1)
只想分享适合我的方式。 我只是使用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
我想有一种方法可以在模型级别上获得相同的结果,但我还没有找到它。