2016-10-31 8 views
0

実際には動作しないようなものが2つあります。私はいくつかのモデルとそれらの依存関係(短縮)をリストアップします。 StudentGroupには、学生(アクティブ/非アクティブの可能性があります)とチャットとしてリストされたメッセージがあります。django.views/django.modelsは、外部キーを持つエンティティを削除できません

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() 

何も変更されていません。私はコンソールで同様のことを試みましたが、それは大丈夫と思われました。同じようなコードの試した束。 サーバーに再起動しても、結果は表示されません。 djangoとwebdevの全般的な知識があれば、どんな助力にも感謝します。

+0

を参照してください、ジャンゴ1.9+内の1行ですべてを行うことができるはずしかし、(group1.students.all'の値が何でありますか) '? – nimasmi

答えて

0
あなたのラインで

Message.objects.filter(group=group).delete() 

あなたはまだ、実際のStudentGroupインスタンスに生のID値からgroupを変換していないように見えます。 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リストに移動する2番目の部分については、.save()部分は必要ありませんが、コードは合理的に見えます。私は、上記のようにオブジェクトが正しくインスタンス化されていないためにエラーが発生している可能性があると考えています。

あなたは `delete_group`機能でhttps://docs.djangoproject.com/en/1.10/ref/models/relations/#django.db.models.fields.related.RelatedManager.add

group1.finished.add(*list(group1.students.all())) 
関連する問題