【发布时间】:2011-06-09 22:45:20
【问题描述】:
嘿, 我试图让信号 pre_save 在我的模型上工作,但在那里 似乎是外键或其他东西有问题。我的模型是 像这样:
class BlogEntry(models.Model):
headline = models.CharField(max_length=100)
content = models.CharField(max_length=2000)
written_by = models.ForeignKey(User)
date = models.DateTimeField(auto_now=True)
project = models.ForeignKey(Project)
这里是处理和保存表单的地方:
def form_valid(self, blogform): # post a blogentry
blog_entry = blogform.save(commit=False)
blog_entry.written_by = self.request.user
blog_entry.project = blog_entry.project #debugging shows that this
is a valid instance of the Project model
blog_entry.save()
return TemplateResponseMixin.render_to_response(self,
self.get_context_data())
这是我的信号接收器功能
@receiver(post_save, sender=BlogEntry)
def project_blog_entry_signal(sender, **kwargs):
log = Log()
log.project = sender.project.field
log.content_type = Log.content_new_blogentry
log.save()
这是一个例外:
无法分配 “django.db.models.fields.related.ForeignKey 0x21eef86c 处的对象”:“Log.project” 必须是“项目”实例。
@the line ---> log.project = sender.project.field 在
project_blog_entry_signal() 函数
发送者对象似乎没有将项目作为模型实例传递,而是作为外键实例传递。这是为什么?
【问题讨论】:
标签: django callback django-signals