Как получить данные из модели базы данных django

Что я сделал:

views.py

class CandidateView(View):
   
   def get(self, request, **kwargs):
      pk = kwargs['pk']
      candidates = Resume.objects.get(pk=pk)

      posts = Post.objects.all().values()
      post_contents = []
      for post in posts:
            if isinstance(post, dict) :  
                continue
            elif isinstance(post, Post):
                post_contents.append(post.content)

      return render(request, 'blog/candidate.html', {'candidate':candidates, 'posts': post_contents})

models.py

class Resume(models.Model):
 name = models.CharField(max_length=100)
 dob = models.DateField(auto_now=False, auto_now_add=False)
 gender = models.CharField(max_length=100)
 locality = models.CharField(max_length=100)
 city = models.CharField(max_length=100)
 pin = models.PositiveIntegerField()
 state = models.CharField(choices=STATE_CHOICE, max_length=50)
 mobile = models.PositiveIntegerField()
 email = models.EmailField()
 job_city = models.CharField(max_length=50)
 profile_image = models.ImageField(upload_to='profileimg', blank=True)
 my_file = models.FileField(upload_to='doc', blank=True)
 blog_post = models.CharField(max_length=100000)
 
class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    date_posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    resume = models.ForeignKey(Resume, on_delete=models.CASCADE, related_name='posts', null=True, blank=True)



    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('post-detail', kwargs={'pk': self.pk})

Я новичок в Django и хочу получить содержимое моего блога из модели Post в CandidateView. Основная идея - получить все содержимое блога и отобразить его в резюме. Но я не могу понять, как это сделать или что я делаю не так.

Основной проблемой является вызов Post.objects.all().values(), а именно .values(), если вы уберете его, то ваш код должен работать. .values() возвращает список диктов, поэтому сейчас вы продолжаете работу, когда это дикт, что и является основной проблемой

Все эти решения будут работать. Скорее всего, вам следует воспользоваться решением 4 и передать актуальные объекты Post в шаблон, таким образом вы сможете получить доступ к другим атрибутам, например title

Решение 1

Remove .values (цикл по объектам Post)

posts = Post.objects.all()
post_contents = []
for post in posts:
    post_contents.append(post.content)

Решение 2

use .values (цикл по списку dicts)

posts = Post.objects.all().values()
post_contents = []
for post in posts:
    post_contents.append(post["content"])

Решение 3

используйте .values "правильно", передавая поле. Затем flat=True удалите цикл

post_contents = Post.objects.all().values("content", flat=True)

Выходные данные для #3

с flat=true

post_contents = ["content1", "content2"]

без flat=true (для этого потребуется цикл типа #2)

post_contents = [{"content": "content1"}, {"content": "content2"}]

Решение 4

передайте сами объекты Post в представление (предпочтительно)

data = {
    'candidate':candidates,
    'posts': Post.objects.all()
}
return render(request, 'blog/candidate.html', data)

Вид для #4

Пройдитесь по постам внутри шаблона

{% for post in posts %}
    {{ post.content }}
    {{ post.title }}
{% endif %}
Вернуться на верх