Методы модели, возвращающие пустые строки
Я получаю пустоту в ответ (из моих методов модели), я не понимаю, где я ошибаюсь в этом, мы можем запросить модель, используя self
class SocialLinks(models.Model):
alias_name = models.CharField(max_length=10,)
name = models.CharField(max_length=30)
url_link = models.URLField()
def get_fb_link(self):
try:
fb = self.objects.get(alias_name='fb')
return fb.url_link
except:
return ""
def get_linkdin_link(self):
try:
linkdin = self.objects.get(alias_name='linkedin')
return linkdin
except:
return ""
def get_insta_link(self):
try:
insta = self.objects.get(alias_name='insta')
return insta.url_link
except:
Ваша проблема в том, что self
соответствует одному экземпляру класса модели, а не самому классу.
Так вы можете сделать
all_fb_links = SocialLinks.objects.filter(alias_name="fb")
и вы получите все записи из модели, которые являются ссылками на facebook, но вы не можете сделать это, ссылаясь на один экземпляр записи, используя self
.
Вы можете написать метод класса, но на самом деле вам нужен менеджер модели для определения некоторых конкретных запросов, чтобы затем вы могли сделать
SocialLinks.get_all_fb_links()
Вот документация по определению пользовательского менеджера: https://docs.djangoproject.com/en/3.2/topics/db/managers/
Метод класса, как вы определяете, будет использоваться для возврата чего-то, что не хранится в таблице, но может быть получено из нее. Простым примером может быть:
def link_type_and_url(self):
return f"{self.alias_name}:{url_link}"