Как построить 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']