这是我的初始代码
class Article(models.Model):
article_author = models.CharField(max_length=12)
article_name = models.CharField(max_length=60)
article_body = models.TextField()
article_date = models.DateTimeField(auto_now_add=True)
article_tags = models.CharField(max_length=25, choices=tags_, null=True)
article_link = make_link()
证明它不会被添加到数据库,我不能使迁移(概率。因为它不是.models的一部分。(我想链接是自动创建的文章类的实例,没有用户)
我可以让它成为一个CharField,然后用函数替换那里的任何东西,但这似乎是一个草率的解决方案,而且它会给默认的admin-panel一个无用的字段。
你可以添加一个link
属性到你的模型
class Article(models.Model):
...
# article_link = make_link()
@property
def link(self):
return make_link()
就可以像article.link
我建议在save()
上生成链接,并将其与editable=False
一起存储在CharField
中,就像威廉建议的那样。
文档:https://docs.djangoproject.com/en/4.0/ref/models/fields/编辑
class Article(models.Model):
article_author = models.CharField(max_length=12)
article_name = models.CharField(max_length=60)
article_body = models.TextField()
article_date = models.DateTimeField(auto_now_add=True)
article_tags = models.CharField(max_length=25, choices=tags_, null=True)
article_link = models.CharField(max_length=200, editable=False)
def save(self):
self.article_link = make_link()
super().save()
或者,如果文章链接遵循某种逻辑,则可能不需要生成和存储该链接,而是将其作为属性动态地访问。
Django有get_absolute_url()
方法,而不是一个属性,用来生成模型对象的url:https://docs.djangoproject.com/en/4.0/ref/models/instances/get-absolute-url
class Article(models.Model):
article_author = models.CharField(max_length=12)
article_name = models.CharField(max_length=60)
article_body = models.TextField()
article_date = models.DateTimeField(auto_now_add=True)
article_tags = models.CharField(max_length=25, choices=tags_, null=True)
@property
def article_link(self):
return make_link()