【发布时间】:2019-11-11 21:51:32
【问题描述】:
我想知道有什么方法可以使用信号在一个模型中获取更新的多对多字段并将它们发布到另一个模型
class Post(models.Model):
name=models.CharField(max_length=24)
nc=models.ManyToManyField(settings.AUTH_USER_MODEL)
def __str__(self):
return self.name
# return self.name
m2m_changed.connect(receiver=like_post,sender=Post.nc.through)
我想在 post 模型的 nc 字段中收集更新的记录并使用信号我想使用函数创建一个对象 这是连接到 Post 模型的信号
def like_post(sender, *args, **kwargs):
# if kwargs['action'] in ('post_update'):
if kwargs['action'] in ('post_add', 'post_remove','post_update'):
print(kwargs['instance'])
instance = kwargs['instance']
print(instance)
notify = Notify.objects.create(
recipient=instance,
creator=Post.objects.get(pk=50),
state='unread',
type=kwargs['action'],
)
else:
print('no instance')
在收件人和创建者部分,我想使用现有用户对象更新这些字段,创建者是更新多多字段的人,收件人是创建该帖子的人
notify model:
class Notify(models.Model):
recipient = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='notify_recipient',on_delete=models.CASCADE)
creator = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='notify_sender',on_delete=models.CASCADE)
state = ('read', 'unread', 'unseen')
type = models.CharField(max_length=30, blank=True)
url = models.CharField(max_length=50, blank=True)
每当我运行它时,实例只会打印帖子对象名称并触发此错误
ValueError at /admin/posts/post/50/change/
Cannot assign "<Post: ok>": "Notify.recipient" must be a "User" instance.
【问题讨论】:
-
正如错误所说,收件人是用户的外键。你为什么要在那里分配一个帖子?
-
不,问题不在于错误,我想知道如何通过信号将外键用户(代替收件人)从 post 模型中的 manytomanyfield 发送到该对象
标签: python django django-models django-views django-signals