【问题标题】:django view retrieve all objects of Many-to-Many relationship of foreign keydjango视图检索外键多对多关系的所有对象
【发布时间】:2018-05-23 19:46:13
【问题描述】:

我有以下三个模型:

class Library(models.Model):
    library_id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=30)

    #This helps to print in admin interface
    def __str__(self):
        return u"%s" % (self.name)

class Book(models.Model):
    book_id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=30)
    # A book can have multiple authors and an author can have multiple books
    author = models.ManyToManyField('Author')

    # A library has many books
    which_library = models.ForeignKey('Library', related_name='books', on_delete=models.CASCADE)

    #This helps to print in admin interface
    def __str__(self):
        return u"%s" % (self.title)


class Author(models.Model):
    author_id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=30)

    #This helps to print in admin interface
    def __str__(self):
        return u"%s" % (self.name)

我想检索特定库中的所有作者。我的视图如下所示:

@api_view(['GET', 'POST'])
def author_list(request, library_id):
    """
    List all authors in a specific library
    """
    if request.method == 'GET':
        authors = Author.objects.get()
        serializer = AuthorSerializer(books, many=True)
        return Response(serializer.data)

    elif request.method == 'POST':
        serializer = AuthorSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        else:
            return Response(
                serializer.errors, status=status.HTTP_400_BAD_REQUEST)

我应该在 get() 中写什么作为我的条件?

更新我的逻辑是:图书馆可以有很多书,一本书可以有很多作者,而一个作者可以有很多书。

【问题讨论】:

    标签: django django-rest-framework django-views


    【解决方案1】:

    你试过了吗:

    authors = Author.objects.filter(book__which_library_id=library_id).distinct()
    

    更多详情在docs many_to_many (搜索文字文章__headline__)

    【讨论】:

    • 谢谢!它确实奏效了!您能否也解释一下这条线的作用?这个语法是什么意思?
    • 很高兴为您提供帮助,您是否通过答案中添加的链接阅读了文档?
    • 是的,现在我找到了我想要的东西 :) 非常感谢!
    猜你喜欢
    • 2020-10-10
    • 2021-04-06
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    相关资源
    最近更新 更多