Hey, Ich versuche, das Signal pre_save auf meinem Modell zu arbeiten, aber dort scheint ein Problem mit einem Fremdschlüssel oder etwas zu sein. Mein Modell ist wie folgt aus:Django: Signal Callback-Funktion fehlt fremd auf Modell
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)
Und hier ist, wo die Form verarbeitet und gespeichert:
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())
Und hier ist mein Signal reciever Funktion
@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()
Und hier ist die Ausnahme:
Kann nicht zugewiesen werden "django.db.models.fields.related.ForeignKey Objekt bei 0x21eef86c": "Log.project" muss eine "Project" -Instanz sein.
@the Linie ---> log.project = sender.project.field in
project_blog_entry_signal() Funktion
Der Absender Objekt scheint nicht zu Übergeben Sie das Projekt als Modellinstanz, sondern als Fremdschlüsselinstanz. Warum das?
Nur dir etwas Tipp zu sparen, könnten Sie Definieren Sie Ihre Funktionsparameter als "def project_blog_entry_signal (sender, instance, ** kwargs)". Auf diese Weise müssen Sie nicht "kwargs [" instance "]", sondern "instance" eingeben :) – LaundroMat