from __future__ import annotations from django.contrib.auth import get_user_model from django.db import models from django.db.models import SET_NULL from wagtail.admin.panels import FieldPanel User = get_user_model() class Author(models.Model): user = models.OneToOneField(User, null=True, blank=True, on_delete=SET_NULL) name = models.CharField(max_length=100) slug = models.SlugField(unique=True) bio = models.TextField(blank=True) avatar = models.ForeignKey( "wagtailimages.Image", null=True, blank=True, on_delete=SET_NULL, related_name="+" ) twitter_url = models.URLField(blank=True) github_url = models.URLField(blank=True) panels = [ FieldPanel("user"), FieldPanel("name"), FieldPanel("slug"), FieldPanel("bio"), FieldPanel("avatar"), FieldPanel("twitter_url"), FieldPanel("github_url"), ] class Meta: verbose_name = "Author" def __str__(self) -> str: return self.name def get_social_links(self) -> dict[str, str]: links: dict[str, str] = {} if self.twitter_url: links["twitter"] = self.twitter_url if self.github_url: links["github"] = self.github_url return links