【发布时间】:2017-04-02 12:52:23
【问题描述】:
我编写代码来编辑属于某个团队的用户列表。为此,我创建了一个表单,如下所示:
class Organization(models.Model):
name = models.CharField(blank=False, verbose_name=_("Name"), help_text=_('Organization Name'), max_length=256)
class Team(models.Model):
organization = models.ForeignKey('Organization')
name = models.CharField(blank=False, verbose_name=_("Name"), help_text=_('Team Name'), max_length=256)
users = models.ManyToManyField('User', related_name='teams')
def __str__(self):
return self.name
class TeamUsersForm(forms.ModelForm):
class Meta:
model = Team
fields = ['users']
users = forms.ModelMultipleChoiceField(queryset=User.objects.filter(request.user.organization), required=False)
def clean_users(self):
users = self.cleaned_data['users']
if users.exclude(organization=request.user.organization):
raise ValidationError(_("Cannot add user from another organization"))
return users
上面的代码应该查看request 值以确定当前组织并将显示和模型存储限制为仅来自同一组织的用户。
但是上面的代码不能工作,因为request的值在类加载时是未知的。
你有什么建议?
我想到了两种变体:
创建一个本地(函数)类,如上述类
TeamUsersForm完全放弃使用 Django 表单并使用更多低级 API
【问题讨论】:
-
以下答案对您有用吗?
-
@nik_m 是的,它有效
标签: django forms validation