实际上我有两件似乎不起作用的东西。我将列出几个模型及其依赖项(缩短)。 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()
没有任何改变。我在控制台尝试了类似的东西,似乎没问题。尝试了一堆类似的代码。 试图将makemigrations添加到服务器重新启动但仍然没有结果。 有点django和webdev的Kinda noob,任何帮助将不胜感激。
答案 0 :(得分:0)
在你的行
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)
。
至于第二部分,将学生移到小组的finished
列表中,您的代码看起来很合理,但您不需要.save()
部分。我怀疑错误可能是由于对象没有被正确实例化,如上所述。
但是你应该可以在Django 1.9+中的一行中完成所有这些,请参阅https://docs.djangoproject.com/en/1.10/ref/models/relations/#django.db.models.fields.related.RelatedManager.add
group1.finished.add(*list(group1.students.all()))