2017-01-06 60 views
1

他のモデルのフィールドで制限する必要がある場合、モデルの選択肢をどのように機能させるか理解してください。ご覧のように、すべての学生は、それが(ForeignKeyので構成された)グループの持つモデル内でlimit_choices_toを動的に指定してください

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) 

グループ:

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}, 
    ) 

と生徒 現在、私は2つのモデルがあります。 しかし、すべてのグループには独自のリーダーがある場合とない場合があります。彼は実際にに属するグループから選ばれた1人の特定の学生(OneToOneFieldによって設定されています)です。 グループに制限されることなく、すべての生徒をすべてのグループのリーダーとして選ぶことが可能になります。提供されたGroupモデルでは、limit_choices_toオプションを設定して、テスト目的のためだけにグループ2の選択を制限しました。

このパラメータを動的に設定することができます。その結果、グループリーダーの選択でこのグループの学生のみを選択できるグループモデルに基づいてフォームクラスを作成する可能性がありますか?

ありがとうございます。

+0

可能性のある複製http://stackoverflow.com/questions/232435/how-do--lastrict-foreign-keys-choices-to-related-objects-only-in-django –

+0

リンクありがとうございます。はい、多くのものが発明されました。しかし、誰かがそのようなパズルを解決するための共通のアプローチを記述できるなら、私は感謝します。私はグループからの学生へのアクセスを使用するというアイデアが好きです:object.student_set.all()しかし、グループモデルの学生リーダーフィールドを実装する明確な方法はありますか? – dimdiden

答えて

0

ちょうど私に合った方法を共有したい。 私はただのModelFormクラス使用して、私の選択肢が制限:あなたは.filter(グループ= self.instance)の助けを借りて見ることができるように私は私の選択肢を制限することができ

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) 

をし、生徒からヘッドを選択する可能性を持っている人この特定のグループにのみ属します。

それからちょうど:

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

私はモデルレベルで同じ結果を達成するための方法があると、私はまだそれを見つけていません。

関連する問題