Home > Enterprise >  How to override "Cannot asign must be an instance" in Django?
How to override "Cannot asign must be an instance" in Django?

Time:08-10

I have two models:

class Message(models.Model):
    username = models.CharField(max_length=255)
    room = models.CharField(max_length=255)
    content = models.TextField()
    date_added = models.DateTimeField(auto_now_add=True)

class Notification(models.Model):
    notification_author = models.ForeignKey(Profile, on_delete=models.CASCADE, related_name="notifauthor")
    notification_from = models.ForeignKey(Order, on_delete=models.CASCADE, related_name="notiffrom")
    is_read = models.BooleanField(default=False)

signals:

@receiver(post_save, sender=Message)

def create_user_notification(sender, instance, created, **kwargs):
    if created:
        Notification.objects.create(
                                    notification_author=instance.username,
                                    notification_from=instance.room)

@receiver(post_save, sender=Message)
def save_user_notification(sender, instance, **kwargs):
    instance.username.save()

I am trying to create signal for creating notification after message is created. But have error:

Cannot assign "20": "Notification.notification_author" must be a "Profile" instance.

How to override it (if possible) without changing CharField to FK in Message model?

Found smth about eval(), but it does not still work

CodePudding user response:

The question is how to convert the string to Profile model without using FK

notification_author=Profile.objects.get_or_create(username=instance.username)
  • Related