Методы модели, возвращающие пустые строки

Я получаю пустоту в ответ (из моих методов модели), я не понимаю, где я ошибаюсь в этом, мы можем запросить модель, используя 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}"
Вернуться на верх