Django:models.py中的def save()

然后:

我正在尝试在我的models.py中添加保存功能,但似乎我做错了什么。用户必须输入名字和姓氏。如果没有他或她输入更多的数据,则我的models.py中的另一个字段应填充这些字段的组合。

models.py:

class Coworker(models.Model):
    first_name = models.CharField(max_length=50, null=False, blank=False)
    last_name = models.CharField(max_length=50, null=False, blank=False)
    full_name = models.CharField(max_length=100, null=False, blank=False)

    def save(self, *args, **kwargs):
        self.full_name = self.first_name + " " + self.last_name
        super().save(*args, **kwargs)

这有可能吗?感谢你的帮助。

周末愉快!

威廉·范昂塞姆(Willem Van Onsem):

请不要。这是冗余数据。事实证明,即使在同一数据库上,保持数据同步也比乍看之下更具挑战性。Django还具有.update(…)[Django-doc]之类的一些功能,可以更新表中的记录,但可以绕过该.save()调用。

例如,您可以使用将full_name在Django / Python级别在运行时计算at 的属性

class Coworker(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)

    @property
    def full_name(self):
        return f'{self.first_name} {self.last_name}'

full_name例如,如果您希望能够对进行过滤,则可以使用Concat[Django-doc]进行注释

from django.db.models import CharField, Value
from django.db.models.functions import Concat

Coworker.objects.annotate(
    full_name=Concat(
        'first_name', Value(' '), 'last_name',
         output_field=CharField()
    )
).filter(full_name__icontains='some query')

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章