Django:将列表作为参数传递给html页面中的泛型创建视图

时间:2016-09-17 20:27:52

标签: django django-templates django-views django-generic-views

我正在为采访轮次的程序制作门户网站。我的基本代码如下:

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列表中)?我想知道,如何将所有done_students的id从HTML页面传递给新调用的创建视图以创建下一轮?

欢迎任何不同方式的建议。我想以任何方式得到它。

2 个答案:

答案 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发送并刷新页面很方便。)

用户可以随心所欲地浏览和更新。

之后他可以点击锁定轮,然后根据需要创建新一轮。