Django模型字段——从CharField的选项填充_

Django模型字段——从CharField的选项填充_,django,django-models,Django,Django Models,只是不想询问是否可以在CharField字段中使用populate_from选项从其他字段中预填充该字段,就像slug字段的示例一样 class Post(models.Model): ***name***= models.CharField(max_length=50) slug = extension_fields.AutoSlugField(populate_from='***name***', blank=True) created = models.DateTi

只是不想询问是否可以在CharField字段中使用populate_from选项从其他字段中预填充该字段,就像slug字段的示例一样

class Post(models.Model):
    ***name***= models.CharField(max_length=50)
    slug = extension_fields.AutoSlugField(populate_from='***name***', blank=True)
    created = models.DateTimeField(auto_now_add=True, editable=False)
    last_updated = models.DateTimeField(auto_now=True, editable=False)
比方说

class Employee(models.Model):
    eid= models.CharField(primary_key = True)
    lastname = models.CharField(max_length=50)
    firstname = models.CharField(max_length=50)
    middlename = models.CharField(max_length=50, null=True) 
现在我不想添加一个新的CharField全名。我不想从lastname、firstname和middlename字段填充全名

fullname = models.CharField(populate_from = "***i don't know what to do here***")

请帮助…

您可以在
员工
模型的保存方法中执行此操作

def save(self, *args, **kwargs):
    self.fullname = '{0} {1} {2}'.format(self.firstname, self.middlename, self.lastname)
    super(Employee, self).save(*args, **kwargs)

为此,您可能必须将
fullname
字段保留为可选字段。否则,您可能会在表单中遇到错误。

这可能是一个解决方案,无需从

class Employee(models.Model):
    eid= models.CharField(primary_key = True)
    lastname = models.CharField(max_length=50)
    firstname = models.CharField(max_length=50)
    middlename = models.CharField(max_length=50, null=True)
    fullname = models.CharField(max_length=50)

    def save(self):
        self.fullname = "%s %s %s" % (lastname, firstname, middlename)
        super(Employee, self).save()
class Employee(models.Model):
    eid= models.CharField(primary_key = True)
    lastname = models.CharField(max_length=50)
    firstname = models.CharField(max_length=50)
    middlename = models.CharField(max_length=50, null=True)
    fullname = AutoSlugField(populate_from=lambda instance: instance.employee.get_full_name())

    def get_full_name(self):
        fullname = "%s %s %s" % (lastname, firstname, middlename)
        return fullname 
或使用和从中填充

class Employee(models.Model):
    eid= models.CharField(primary_key = True)
    lastname = models.CharField(max_length=50)
    firstname = models.CharField(max_length=50)
    middlename = models.CharField(max_length=50, null=True)
    fullname = models.CharField(max_length=50)

    def save(self):
        self.fullname = "%s %s %s" % (lastname, firstname, middlename)
        super(Employee, self).save()
class Employee(models.Model):
    eid= models.CharField(primary_key = True)
    lastname = models.CharField(max_length=50)
    firstname = models.CharField(max_length=50)
    middlename = models.CharField(max_length=50, null=True)
    fullname = AutoSlugField(populate_from=lambda instance: instance.employee.get_full_name())

    def get_full_name(self):
        fullname = "%s %s %s" % (lastname, firstname, middlename)
        return fullname 

这里有一个不需要覆盖
save
功能的选项:

class Employee(models.Model):

    def get_fullname(self):
        return '{} {} {}'.format(self.lastname, self.firstname, self.middlename)

    eid= models.CharField(primary_key = True)
    lastname = models.CharField(max_length=50)
    firstname = models.CharField(max_length=50)
    middlename = models.CharField(max_length=50, null=True) 
    fullname = property(get_fullname)

如果您不需要将
fullname
lastname
firstname
middlename
分开编辑,则此选项非常有用,因为它不会在admin中显示为字段,而是将结果存储在数据库中,调用时获取值

感谢回复人,我将尝试此操作以及其他答案。所以我有多个选项可以使用..django rest可以吗?如果我编辑lastname,全名将自动修改?是的。我刚刚编辑了我的答案,因为这种方式
fullname
实际上并没有存储在数据库中,而是在需要时获取它的值。使用DRF也可以,因为
fullname
充当常规字段。感谢回复人..对不起,我不能投票给你的答案。声誉不够..:D