0

私はインタビューラウンドの手順のためのポータルを作成しています。次のように私の基本的なコードは次のとおりです。Django:リストをジェネリックの引数としてリストに渡すhtmlページから

models.py

class Round(models.Model): 
    pending_students = models.ManyToMany(User, related_name='pending_student', blank=True) 
    done_students = models.ManyToMany(User, related_name='done_students', blank=True) 
    round_number = models.PositiveIntegerField(default=0) 
    #other fields 

まず、現在のラウンドのために、私は別にpending_studentsdone_studentsを表示しています。現在のユーザーは、保留中の保留中のものを持ってきます(彼が望むなら保留中にします)。私はそれを望む、提出するには、次のラウンドを作成する必要があります。 新しいラウンドが作成されたら、前回ラウンドのdone_studentsは、この新しく作成されたラウンドのpending_studentsになるはずです。私はジェネリック作成ビューを使用しています(ただし、必要に応じて、私は手動で書いても問題ありません)。

今、問題は作成ビューで、どの生徒が次のラウンドに行くべきかを知るにはどうすればいいですか?(クライアント側のdone_studentsのリストにいる人を意味します)私は知りたいのですが、HTMLページのすべてのdone_studentsのIDを新しく作成したビューに渡して次のラウンドを作成するにはどうすればいいですか?

さまざまな方法の提案は歓迎されます。私はそれを何とかしたい。

+0

信号を使用するとおそらく過剰です。保留中/完了を変更するためにここでフォームセットを使用していますか?ビューの関連セクションを更新できますか? – e4c5

+0

フォームはありません(フォームが該当するかどうかはわかりません)。クライアント側では、手動で行います。私は2つのリストを持つように:保留中と完了。現在のユーザーは何らかのフリッピングを行います。彼が提出した後、私はdone_studentsのすべてのidのjavascript配列を取得します。今度は、次のラウンドを作成するためにラウンドモデルの作成ビューに渡したいと思います。 –

+0

私は本当に座ってフォームのセクションを読むべきだと思います。 https://docs.djangoproject.com/en/1.10/topics/forms/ – e4c5

答えて

0

ラウンドにsubmitted = models.BooleanField(default=False)を追加できます。ラウンドを提出すると、submittedの値はTrueになります。

Roundが保存されていることを確認する信号を作成し、submittedTrueであるかどうかを確認できます。その場合は、新しいRoundを自動的に作成してから、add()メソッドを使用して、通過するすべての生徒に割り当てることができます。

ような何か:私は違うとクールな方法で行った

from django.db.models.signals import pre_save 
from django.dispatch import receiver 
from myapp.models import Round 

@receiver(post_save, sender=Round) 
def my_handler(sender, **kwargs): 
    instance = past_round 
    if past_round.submitted : 
     next_round = Round() 
     next_round.save() 
     round_students = [student.pk for student in past_round.done_students] 
     next_round.pending_students.add(round_students) 
+0

あなたの方法は、すでに学生がdone_studentsにいる場合にのみ有効です。現在の職場では、pending_studentsにはすべての生徒とdone_studentsが空になっています(ラウンド開始時など)。現在のユーザーは、クライアント側で何らかのフリッピングを行います。それから彼は提出する。そのとき、クライアント側のdone_studentsリストにあるすべての生徒を、そのラウンドオブジェクトのdone_studentフィールドに追加したいと思います。より簡単には:私はすべてのdone_studentsのIDのjavascriptのリストを取得します、私はどういうわけかそれを表示するために渡します。見て、私はそれらのIDを現在のラウンドのdone_studentsに追加し、次のラウンドを初期化します。 –

+0

私はこれらのidをクライアント側からどのように渡すことができるか知りたいですか?もし私が何らかの形でそれらを渡すことができれば、この現在のラウンドを終了して次のラウンドを初期化することができます(あなたの与えられたメソッドは次のラウンドの初期化を行います)。 –

0

私はショートリストページを作成し、次のラウンドのために学生を選択した後、ユーザーは更新ボタンをクリックします。それによって、ajaxコールはバックエンドのm2m関係の変更を処理します。 (私は、argsを介して送信し、ページをリフレッシュする代わりに、リストを送信するためにajaxを使用するのが便利だと分かった)。

ユーザーは、

その後、ラウンドロックをクリックすると、必要に応じて新しいラウンドが作成されます。

関連する問題