2017-11-30 1 views
0

Hello jeder, ich habe keine Lösung, um Benutzer, der das Content-Objekt in Django besitzt. Also poste ich für eure Jungs Hilfe!Django: ContentType Objektzugriff, Holen Benutzer aus dem content_object

Ich baue 2 Modelle: Reaktion und Benachrichtigung. Wenn Benutzer Reagieren, wird Benachrichtigung automatisch ein Objekt erstellt. Dies ist mein Code: Modellreaktion:

class Reaction(models.Model): 
    user = models.ForeignKey(User) 
    react_type = models.CharField(max_length=100, choices=REACT_TYPES, default='NO') 
    timestamp = models.DateTimeField(auto_now_add=True, null=True) 
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE, null=True) 
    object_id = models.PositiveIntegerField(null=True) 
    content_object = GenericForeignKey('content_type', 'object_id') 

    def save(self, force_insert=False, force_update=False, *args, **kwargs): 
     Notification(from_user = self.user, to_user = ???, notification_type = Notification.LIKED, target_content_type = self.content_type, target_object_id = self.object_id).save() 
     super(Reaction, self).save(*args, **kwargs) 

Modelle Mitteilung

class Notification(models.Model):  
    from_user = models.ForeignKey(User, related_name='from_user_noti') 
    to_user = models.ForeignKey(User, related_name='to_user_noti') 
    date = models.DateTimeField(auto_now_add=True, null=True) 
    is_read = models.BooleanField(default=False) 
    target_content_type = models.ForeignKey(ContentType, related_name='notify_target', blank=True, null=True) 
    target_object_id = models.PositiveIntegerField(null=True) 
    target = GenericForeignKey('target_content_type', 'target_object_id') 

Wie Sie gesehen haben, ich habe Probleme mit to_user Felder erhalten. Dieses Feld möchte ich erhalten Benutzer, der ein Inhaltsobjekt in Django Beispiel: Post, Kommentar, ... Bitte helfen Sie mir bei diesem Fall!

+0

In 'Notification' Sie verschiedene' related_name' für 'from_user' und' to_user', und diese related_names alphanumerisch sein sollte haben sollte, nicht '+'. – manassehkatz

+0

Sorry, ich mache einen Fehler durch Kopieren einfügen. Ich habe es geändert!! –

+0

Nun, Sie können ein anderes to_user Feld im Reaktionsmodell haben. –

Antwort

1

Vielleicht versuchen, unter der Annahme, dass die content_object einen Benutzer Beziehung hat:

class Reaction(models.Model): 
    user = models.ForeignKey(User) 
    react_type = models.CharField(max_length=100, choices=REACT_TYPES, default='NO') 
    timestamp = models.DateTimeField(auto_now_add=True, null=True) 
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE, null=True) 
    object_id = models.PositiveIntegerField(null=True) 
    content_object = GenericForeignKey('content_type', 'object_id') 

    def save(self, force_insert=False, force_update=False, *args, **kwargs): 
     super(Reaction, self).save(*args, **kwargs) 
     Notification(from_user = self.user, to_user = self.content_object.user, notification_type = Notification.LIKED, target_content_type = self.content_type, target_object_id = self.object_id).save() 
+0

Ich habe diesen Fehler @RajKris AttributeError: 'NoneType' Objekt hat kein Attribut 'Benutzer' –

+0

wurde das content_object gespeichert (für das Reaktionsobjekt)? – rajkris

+0

Tut mir leid. Das Super gibt eigentlich nichts zurück. Der Code wurde aktualisiert. Bitte prüfe. – rajkris

Verwandte Themen