django中的自定义链接



这是我的初始代码

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()

最新更新