У меня есть модель индекса, которая сохраняет все идентификаторы объектов / PK всех моих различных моделей постов:
collectable_post_models = models.Q(app_label='App', model='post_model1') | models.Q(app_label='App', model='post_model2') | models.Q(app_label='App', model='post_model3')
class PostCollection(models.Model):
id = models.AutoField(primary_key=True, editable=False)
content_type = models.ForeignKey(ContentType, limit_choices_to=collectable_post_models,
related_name='collections', related_query_name='collection',
on_delete=models.CASCADE, null=True, blank=False)
object_id = models.CharField(max_length=36, blank=False)
content_object = GenericForeignKey('content_type', 'object_id')
date_added = models.DateTimeField(auto_now_add=True, blank=False)
class Meta:
unique_together = ('content_type', 'object_id')
verbose_name = "Post Collection - HELPER TABLE"
verbose_name_plural = "Post Collections - HELPER TABLE"
ordering = ['-date_added']
Каждая из моих моделей постов выглядит очень похоже, например:
class Post(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
author = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(verbose_name="Title", max_length=40)
collection = GenericRelation(PostCollection, related_query_name='post')
Теперь у меня есть представление, которое должно сгенерировать список предложений, которые пользователь также хотел бы видеть:
def post_proposals():
post_elements = sorted(
chain(
PostCollection.objects.values_list('id', flat=True),
)
)
post_elements_list = list(post_elements)
post_proposals = random.sample(post_elements_list, 1) # 1 is the number of elemets that should get returned
return post_proposals
В моем шаблоне я в настоящее время просто возвращаю значение идентификатора объекта PostCollection, но на самом деле я хочу получить заголовок элемента post за объектом Index. Как мне это сделать?
Это то, что я делаю в моем шаблоне, например:
{% for post_proposal in post_proposals %}
<h1>{{post_proposal}}</h1>
{% endfor %}