我正在为采访轮次的程序制作门户网站。我的基本代码如下:
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_students
和done_students
。当前用户将带来一些待完成(并且如果他想要完成等待),然后他将提交。我希望如此,在提交时,应该创建下一轮。
现在我希望如果创建了新轮次,那么前一轮的所有done_students
都应该来到这个新创建的轮次的pending_students。我正在使用通用创建视图(但如果需要,我可以手动编写)。
现在的问题是,在创建视图中,我怎么知道哪个学生应该去下一轮(意味着谁在客户端的done_students列表中)?我想知道,如何将所有done_students的id从HTML页面传递给新调用的创建视图以创建下一轮?
欢迎任何不同方式的建议。我想以任何方式得到它。
答案 0 :(得分:0)
您可以将submitted = models.BooleanField(default=False)
添加到您的回合中。提交回合后,submitted
的值将变为True
。
然后,您可以创建一个信号,用于检查保存Round
的时间以及submitted
是否为True
。在这种情况下,您可以自动创建新的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)
答案 1 :(得分:0)
我做了一个不同的,很酷的方式。
我制作了一个入围页面,在为下一轮选择学生后,用户将点击更新按钮。通过这种方式,ajax调用将处理后端m2m关系的变化。 (我发现使用ajax发送列表而不是通过args发送并刷新页面很方便。)
用户可以随心所欲地浏览和更新。
之后他可以点击锁定轮,然后根据需要创建新一轮。