Osman Hamashool
Osman Hamashool

Reputation: 324

TypeError at /accounts/sign_up/ create() takes 1 positional argument but 2 were given

When I try to create a new user it will show me this error

return getattr(self.get_queryset(), name)(*args, **kwargs)
TypeError: create() takes 1 positional argument but 2 were given

and this is my models

class Notification(models.Model):
    title = models.CharField(max_length=250)
    message = models.TextField()
    viewed = models.BooleanField(default=False)
    user = models.ForeignKey(User, on_delete=models.DO_NOTHING)


def create_welcome_message(sender, **kwargs):
    if kwargs['created']:
        noti=Notification.objects.create(kwargs['instance'],
                                    title="Welcome Message",
                                    message="Thank you for singing up!")


post_save.connect(create_welcome_message, sender=User)

I've been missing for a long time. using this language. then help me with this error

Upvotes: 0

Views: 393

Answers (1)

user10434643
user10434643

Reputation:

You need to pass keyword arguments to create() method even for kwargs['instance'] like:

.create(instance=kwargs['instance'])

Or you can use add() method instead:

Notification.objects.add(kwargs['instance'])

Better alternative for notification :

pip install django-notifications-hq

from django.db.models.signals import post_save
from notifications.signals import notify
from myapp.models import MyModel

def my_handler(sender, instance, created, **kwargs):
    notify.send(instance, verb='was saved')

post_save.connect(my_handler, sender=MyModel)

Upvotes: 1

Related Questions