<p>是的,你可以</p>
<pre><code>class Product(models.Model):
other= models.CharField(max_length=50, blank=True, null=True)
def save(self, *args, **kwargs):
self.another = "BUG%d" %(self.pk)
super(Product, self).save(*args, **kwargs)
</code></pre>
<p>你可以签出<a href="https://www.learnpython.org/en/String_Formatting" rel="nofollow noreferrer">python string formatting</a></p>
<p>另一种方法是使用<code>@property</code>{a2}或<code>@cached_property</code>{a3}</p>
<p>在您的情况下,@cached_属性可能更好<code>property</code>和<code>cached_property</code>将不会保存在数据库中。但您可以在模板中调用它,就好像这是另一个模型字段一样</p>
<p>使用属性和cahced_属性的明显好处是,您不需要每次需要保存模型时都保存到db</p>
<pre><code>from django.utils.functional import cached_property
class Product(models.Model):
# since we want to have "another" as a property, you do not need to
# generate a field called "another"
#another= models.CharField(max_length=50, blank=True, null=True)
somefield = models.CharField(max_length=50, blank=True, null=True)
@cached_property
def another(self):
return "BUG%d" %(self.pk)
# not sure why the above string formatting not working for you.
# you can simply do:
return "BUG" + str(self.pk)
def save(self, *args, **kwargs):
super(Product, self).save(*args, **kwargs)
</code></pre>