django - 如何在 pre_save Django 中连接模型字段值
问题描述
我不知道如何问这个问题,所以请多多包涵。
这是我的问题:
我有两个模型Foo
和Bar
. 以下是models.py
,
class Foo(models.Model):
foo_code = models.CharField(max_length=12, blank=True, null=True)
class Bar(models.Model):
foo_rel = models.ForeignKey(Foo)
bar_code = models.CharField(max_length=12, blank=True, null=True)
现在,foo_code
假设123456
当我创建我想成为的新Bar
实例时,即。bar_code
{{foo_code}}-{{id of Bar}}
123456-01
我无法解决问题。我想过使用pre_save
/post_save
但想不出逻辑。请帮忙!
编辑:将 FK 添加到Foo
解决方案
您可以覆盖保存方法:
class Bar(models.Model):
foo_rel = models.ForeignKey(Foo)
bar_code = models.CharField(max_length=12, blank=True, null=True)
def save(self, *args, **kwargs):
if self.bar_code and len(self.bar_code.split('-')) > 1:
# Do update the Bar instance, need remove old previx first
self.bar_code = self.bar_code.split('-')[1]
self.bar_code = '{}-{}'.format(self.foo_rel.foo_code, self.bar_code)
super(Bar, self).save(*args, **kwargs)
这将按如下方式工作:
>>> f = Foo.objects.create(foo_code='123456')
>>> b = Bar.objects.create(foo_rel=f, bar_code='01')
>>> b.bar_code
u'123456-01'
>>> b.bar_code = '03'
>>> b.save()
>>> b.bar_code
u'123456-03'
>>> f.foo_code = '4567'
>>> f.save()
>>> b.save()
>>> b.bar_code
u'4567-03'
它看起来不错,但你应该记住它不适用于批量update
:
>>> Bar.objects.update(bar_code='333')
1
>>> b.refresh_from_db()
>>> b.bar_code
u'333'
推荐阅读
- body-parser - 我遇到了 json bodyParser 问题
- javascript - Javascript 年龄计算输出到字符串,到 HTML
- javascript - Google Apps 脚本 - 我如何获取 JSON?
- bash - 循环文件并提取文件名的一部分
- javascript - 在 laravel 和 stripe 中有底部的 EventListener 的问题
- codeigniter - 从结果数组中的mysql获取数据并批量更新
- python - 如何在有序字典中获得正确数量的子元素?
- database - 多重保护认证 VS 用户类型认证
- graphics - 为什么在 Framebuffer Texture 上使用 swizzling 时 Vulkan 验证层会引发错误
- python - pyqt5中的Qcompleter自动完成在我输入时不显示选项