我几天以来一直在研究Django。我知道如何在Laravel中获得我想要的东西,但我需要Django的帮助。
假设我有两张桌子。 作者和书籍
书表包含:id, name, author
authors表包含:
id, name
使用Laravel,我可以添加一个函数,它可以提供书籍和作者之间的关系,Book::with('authors')
将为我提供书籍的所有数据以及额外的字段author
,其中包含作者的详细信息。书。我不知道如何用Django做这个Eager Loading。
假设我使用
Book.objects.all()
然后我想要一个阵列中的所有书籍。在书的每一项中,都应该有一个可用的对象,它将提供有关该作者的详细信息。 例如:
{
[
{
id: 3
name: "Name of book",
author: {
id: 7,
name: "Author name"
}
},
{
id: 4
name: "Name of other book",
author: {
id: 3,
name: "Author of other book"
}
}
]
}
答案 0 :(得分:0)
class Base(models.Model):
name = models.Charfield(max_length=100)
def to_dict(self):
rtn = {}
c = self._meta._get_fields(reverse=False)
for i in c:
item = str(i).split('.')[2]
if hasattr(self, item):
rtn[item] = getattr(self, item)
return rtn
class Books(Base):
author = models.ForeignKey(Author, related_name='authors')
@classmethod
def get_all_books(cls):
l = []
books = cls.objects.all()
for book in books:
book_dict = book.to_dict()
book_dict['author'] = book.author.to_dict()
l.append(book_dict)
return {'result': l}
class Author(Base):
def __str__(self):
return self.name
我用这种方式编辑了你所要做的就是打电话
Book.get_all_books()
结果就像这样
{
'result': [
{
id: 3
name: "Name of book",
author: {
id: 7,
name: "Author name"
}
},
{
id: 4
name: "Name of other book",
author: {
id: 3,
name: "Author of other book"
}
}
]
}