ちょっと、 私のモデルで信号pre_saveを動作させようとしていますが、 は外部キーなどで何らかの問題があるようです。私のモデルは、このような です:Django:シグナルコールバック関数がモデルに外国語がありません
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" は "Project"インスタンスである必要があります。
@Theライン---> log.project = sender.project.field
project_blog_entry_signal()関数に
センダオブジェクトはしていないようプロジェクトをモデルインスタンスとして渡しますが、外部キーインスタンスとして渡します。何故ですか?
をちょうどあなたにいくつかのタイピングを節約するために、あなたの可能性関数のパラメータを "def project_blog_entry_signal(送信者、インスタンス、** kwargs)"として定義します。この方法では、 "kwargs [" instance "]"と入力する必要はありませんが、代わりに "instance"と入力します:) – LaundroMat