首页 > 解决方案 > Django models.py(API 结果) - 检索当前帖子以添加 api 结果

问题描述

我是 Django 新手,我遇到了一个问题。我不知道如何检索models.py 中的当前帖子。我为此尝试了不同的方法。

'QuerySet' object has no attribute 'aliments'

或没有错误,也没有从 ListAliments 添加到 Post

get_object_or_404(Post, id=kwargs['id']) 

这是我的models.py

class ListAliments(models.Model):
    name = models.CharField(max_length=40, unique=True)
    slug = models.SlugField(editable=False)
    status = models.IntegerField(choices=STATUS, default=1)     
    
    def save(self, *args,**kwargs):
        if not self.slug:
            self.slug = unique_slugify(self, slugify(self.name))
        super(ListAliments, self).save(*args, **kwargs)
    
    def __str__(self):
        return self.name

class Post(models.Model):
    title = models.CharField(max_length=190)
    url_image = models.URLField(max_length=200, default=None)
    aliments = models.ManyToManyField('ListAliments',blank=True, related_name='listaliments_post')
    
    ...
    def save(self, *args, **kwargs):
    if not self.slug:
        self.slug = unique_slugify(self, slugify(self.title))
        super(Post, self).save(*args, **kwargs) -> First save for Post which has not no ID
    ...
    if self.url_image:
        request = ...
        response = ...
        
        if response:
            names = []
            for concept in response.outputs[0].data.concepts:
                current_aliments = ListAliments.objects.filter(name=concept.name)
                    current_post = Post.objects.filter(url_image=self.url_image) #get_object_or_404(Post, id=kwargs['id']) 
                    if current_aliments.count()<1:
                        create_aliments = self.aliments.create(name=concept.name)
                        current_post.aliments.add(create_aliments)
                    else:
                        existed_aliments = ListAliments.objects.get(name=concept.name)
                        current_post.aliments.add(existed_aliments)
        super().save(*args, **kwargs)

标签: django

解决方案


Post.objects.filter(url_image=self.url_image)返回QuerySet 以获取对象调用firstso Post.objects.filter(url_image=self.url_image).first();请注意,您可以获得None


推荐阅读