程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Django 信号:不能使用 For 循环?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Django 信号:不能使用 For 循环??

开发过程中遇到Django 信号:不能使用 For 循环?的问题如何解决?下面主要结合日常开发的经验,给出你关于Django 信号:不能使用 For 循环?的解决方法建议,希望对你解决Django 信号:不能使用 For 循环?有所启发或帮助;

当我删除信号中的 for 循环时,它可以工作(正确创建一个对象),但是当我使用 for 循环时,它应该为 Collection 对象中的每个帖子创建一个对象,但这不起作用。它甚至不创建 Collection_List_Item 模型的对象。这个 for 循环不起作用有什么原因吗?有没有办法解决这个问题?

模型

class Collection(models.Model):
    posts = models.ManyToManyFIEld(Post,related_name='collection_posts',blank=TruE)
    author = models.ForeignKey(User,on_delete=models.CASCADE,null=TruE)
    collection_name = models.CharFIEld(max_length=100)
    collection_description = models.CharFIEld(max_length=1000,blank=TruE)
    collection_likes = models.ManyToManyFIEld(User,related_name='liked_collections',blank=TruE)
    collection_image = models.ImageFIEld(upload_to="images/")
    private = models.BooleanFIEld(default=falsE)
    follows = models.ManyToManyFIEld(User,related_name='collection_follows',blank=TruE)

    def __str__(self):
        return self.collection_name

class Collection_List_Item(models.Model):
    post = models.ForeignKey(Post,null=TruE)
    user = models.ForeignKey(User,null=TruE)
    collection = models.ForeignKey(Collection,null=TruE)
    saved = models.BooleanFIEld(default=falsE)
    created_date = models.datetiR_854_11845@eFIEld(auto_Now_add=TruE)
    modifIEd_date = models.datetiR_854_11845@eFIEld(auto_Now=TruE)

    def __str__(self):
        return self.collection.collection_name
@H_801_8@

信号:

@receiver(post_save,sender=Collection)
def create_collection_List_item(sender,instance,created,**kwargs):
    if created:
        for i in instance.posts.all():
            collection_List_item = Collection_List_Item.objects.create(collection=instance,user=instance.author,post=i)
        
            collection_List_item.save()
@H_801_8@

解决方法

对于 @H_5_7@manyToManyField@H_801_8@ 字段,您必须使用 @H_5_7@m2m_changed@H_801_8@ (Django Docs) 信号。

因为 @H_5_7@manyToManyField@H_801_8@ 是在实例保存后保存的,因此所有 @H_5_7@manyToManyField@H_801_8@ 更新都没有任何记录。

from django.db.models.signals import m2m_changed
from django.db import IntegrityError

@receiver(m2m_changed,sender=Collection.posts.through)
def create_collection_list_item(sender,instance,action,*args,**kwargs):
    if action == "post_add":
        for i in instance.posts.all():
            try:
                collection_list_item = Collection_List_Item.objects.create(collection=instance,user=instance.author,post=i)
            except IntegrityError:
                pass
@H_801_8@

大佬总结

以上是大佬教程为你收集整理的Django 信号:不能使用 For 循环?全部内容,希望文章能够帮你解决Django 信号:不能使用 For 循环?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:循环?