Django: default value for field from model instance

I am trying to get the last_name and first_name of a newly created user and create a folder name using both values.

But I get an object of type "User" does not have the attribute "first_name"

This is the model of my users:

def create_folder_name(first_name, last_name):
    return first_name + last_name


class User(AbstractUser):
    folder_name = models.CharField(max_length=255, unique=True,
                                   default=create_folder_name(User.first_name, User.last_name))

How to pass User.first_name function to my function

+4
source share
2 answers

If your defaultbuilt from other field values, you need to have an instance of the model to get the values.

Cancel methodsave() :

class User(AbstractUser):
    folder_name = models.CharField(max_length=255, unique=True)

    def save(self, *args, **kwargs):
        if not self.folder_name:
            self.folder_name = create_folder_name(self.first_name, self.last_name)
        super(User, self).save(*args, **kwargs)
+3
source

I think you'd better abandon the method savein your model User:

class User(AbstractUser):
    folder_name = models.CharField(max_length=255, unique=True)

    def save(self, *args, **kwargs):
        self.folder_name = create_folder_name(self.first_name, self.last_name)
        super(User, self).save(*args, **kwargs)
0
source

Source: https://habr.com/ru/post/1541315/


All Articles