Как построить get_absolute_url с годом, месяцем, днем и slug на Djano Rest Framework

Я создаю приложение для блога с DRF, и я хочу, чтобы оно могло получить мой метод get_absolute_url для вач-постов, например: http://127.0.0.1:8001/blog/posts/2022/10/11/my-post А не по умолчанию: http://127.0.0.1:8001/blog/posts/1

Вот моя модель:

class Post(models.Model):
STATUS_CHOICES = (
    ('draft', 'Draft'), ('published', 'Published')
)
title = models.CharField(max_length=250)
slug = models.SlugField(unique_for_date='publish', max_length=250)
body = models.TextField()

author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='blog_posts')

publish = models.DateTimeField(default=timezone.now)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)

status = models.CharField(max_length=10, choices=STATUS_CHOICES, default='draft')
category = models.ForeignKey(Category, on_delete=models.SET_NULL, related_name="posts" ,blank=True, null=True )

objects = models.Manager()
published = PublishedManager()

tags = TaggableManager()

feature_image = models.ImageField(upload_to="uploads/", null=True, blank=True)

class Meta:
    ordering = ('-publish',)

def __str__(self):
    return self.title

def get_absolute_url(self):
    return reverse('post-detail', args=[self.publish.year,
                                             self.publish.month,
                                             self.publish.day,
                                             self.slug], )

И мой сериализатор:

class BlogSerializer(serializers.HyperlinkedModelSerializer):
author = serializers.ReadOnlyField(source='author.username')
url = serializers.CharField(source='get_absolute_url', read_only=True)

class Meta:
    model = Post
    fields = ['url', 'id', 'title', 'slug', 'body', 'author', 'publish', 'created_at', 'updated_at',
    'status', 'category', 'feature_image']

Помогите кто-нибудь, как это сделать, пожалуйста. спасибо!

Из того, что вы написали и что я видел, не похоже, что вы делаете что-то неправильно.
Не могли бы вы описать, что это выдает? - Это сбой? - это неправильный url? - ему нужен префикс сайта?

Я также видел это, /, что может быть маршрутом, который вы могли бы выбрать. (Я делал это с пользовательскими страницами администратора)

class BlogSerializer(serializers.HyperlinkedModelSerializer):
  url = serializers.SerializerMethodField()

  def get_url(self, obj):
    return obj.get_absolute_url()

  class Meta:
    model = Post
    fields = ['url', 'id', 'title', 'slug', 'body', 'author', 'publish', 'created_at', 'updated_at',
    'status', 'category', 'feature_image']
Вернуться на верх