实际上我有两件事似乎不起作用。我将列出几个模型和它们的依赖关系(简称)。StudentGroup有学生(可能是活动的/不活动的)和消息,它们被列为聊天。
在views.py中,当我调用delete_group()时,我想使所有学生处于非活动状态,并删除与该组相关的所有消息。
class StudentsGroup(models.Model):
students = models.ManyToManyField(User,limit_choices_to={'is_staff': False}, related_name="user_groups",blank=True)
finished = models.ManyToManyField(User,limit_choices_to={'is_staff': False}, related_name="finished_user_groups",blank=True)
class Message(models.Model):
group=models.ForeignKey(StudentsGroup)
def delete_group(request,group):
Message.objects.filter(group=group).delete()
groupl=StudentsGroup.objects.get(id=group)
for s in group1.students.all():
groupl.finished.add(s)
group1.save()
没有变化。我在主机上也尝试过类似的做法,结果似乎还不错。尝试了一些类似的代码。尝试在服务器重新启动时添加makemigration,但仍然没有结果。在django和webdev方面有点新手,任何帮助都会很感激。
在你的行
Message.objects.filter(group=group).delete()
看起来您还没有将group
从原始ID值转换为实际的StudentGroup实例。如果group
作为StudentGroup实例提供给该函数,那么这应该可以工作。如果,正如我怀疑的那样,group
只是一个原始ID值,那么您的过滤器查询应该是:
Message.objects.filter(group_id=group).delete()
使用对象比使用id更好。试着这样做:
group = StudentGroup.objects.get(id=group)
Message.objects.filter(group=group).delete()
然后你可以做其他事情,如group = get_object_or_404(StudentGroup, id=group)
。
至于第二部分,将Students移动到组的finished
列表,您的代码看起来很合理,尽管您不需要.save()
部分。我怀疑这些错误可能是由于对象还没有被正确实例化,就像上面那样。
group1.finished.add(*list(group1.students.all()))