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

신호를 사용하는 것은 아마도 과잉입니다. 여기에서 formset을 사용하여 보류 중/완료를 변경 하시겠습니까? 관련 게시물 섹션을 업데이트 할 수 있습니까? – e4c5

+0

양식이 없습니다 (어떤 양식이 적용 가능할 지 모르겠다.) 클라이언트 쪽에서는 수동으로 처리 할 것입니다. 마찬가지로 나는 두 가지 목록을 보게 될 것입니다 : 대기 중이고 완료되었습니다. 현재 사용자는 약간의 뒤집기를 할 것입니다. 그가 제출 한 후에, 나는 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

귀하의 방법은 학생이 이미 수료 한 학생에게만 적용됩니다. 현재 직업의 경우 pending_students에는 모든 학생이 있고 done_students는 비어 있습니다 (예 : 라운드 시작시). 현재 사용자는 클라이언트 측에서 약간의 반전을 수행합니다. 그런 다음 그는 복종 할 것입니다. 그때 나는 클라이언트 측의 done_students 목록에있는 모든 학생들을 해당 라운드 객체의 done_student 필드에 추가하려고합니다. 좀 더 간단히 : 나는 모든 done_students의 id에 대한 javascript 목록을 얻을 것이고, 어떻게 든 그것을 전달할 것입니다.보기에서, 나는이 라운드의 id_sudents를 추가하고 다음 라운드를 초기화 할 것이다. –

+0

클라이언트 측에서 볼 때이 ID를 어떻게 전달할 수 있는지 알고 싶습니다. 내가 어떻게 든 그들을 통과시킬 수 있다면, 나는이 라운드를 끝내고 다음 라운드를 초기화 할 수있다 (당신의 주어진 메소드는 다음 라운드의 초기화를 할 것이다). –

0

나는 다른과 멋진 방법으로했다.

나는 단편 페이지를 만들었고 다음 라운드를 위해 학생을 선택한 후, 사용자는 업데이트 버튼을 클릭 할 것입니다. 그러면 ajax 호출이 백엔드에서 m2m 관계의 변경을 처리합니다. (args를 통해 전송하고 페이지를 새로 고치는 대신 아약스를 사용하여 목록을 보내는 것이 편리하다는 것을 알았습니다.)

사용자는 원하는만큼 서핑하고 업데이트 할 수 있습니다.

그 후 그는 잠금 라운드를 클릭 할 수 있으며, 필요에 따라 새로운 라운드가 생성됩니다.