チームに所属するユーザのリストを編集するコードを記述します。このため、私は以下のように、フォームを作成:上記コンテキストに依存してDjangoフィールドを検証する
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
という値はクラスの読み込み時には分かっていないため、上記のコードは機能しません。
あなたは何をお勧めしますか?
私は2つのバリエーションを考え:
は、上記のクラスのようなクラス
TeamUsersForm
は完全にこのためのDjangoのフォームを使用して却下し、より低レベルのAPIを使用します(関数に)ローカルを作成そこ
TeamUsersForm
の__init__
とアクセスrequest
オーバライド
以下の答えはあなたのために働いていましたか? –
@nik_mはい、それは動作します – porton