我有2个班级,有多对多的关系,我的目标是填写一个'项目'列出了来自这2个模型的数据,这是我的模型:
class Bakery(models.Model):
title = models.CharField('restaurant_name', max_length=100)
class DeliveryService(models.Model):
title = models.CharField('deliveryservice_name', max_length=100)
bakery = models.ManyToManyField(Bakery)
以下是我的观点中的逻辑'文件:
item = []
bakerys = Bakery.objects.all()
for i in bakerys:
item.append(i.title)
item.append(i.deliveryservice.title)
我希望你能得到我想要完成的东西。我目前的观点'文件逻辑是错误的,我知道,我只是不知道我能做些什么来解决这个问题。谢谢你的时间。
答案 0 :(得分:1)
以下似乎可以满足您的要求。但是你想要创建一个列表,其中包含所有混合在一起的不同对象的标题,并且可能有重复项(如果递送服务链接到多个面包店,它将被添加两次),这似乎很奇怪。
exports.fcmSend = functions.firestore.document('messages/{userId}').onCreate(event => {
console.log("fcm send method");
const message = event.data.data();
const userId = event.params.userId;
const token_id = 'asdfsadfdsafds';
let token = "";
const payload = {
notification: {
title: "Test",
body: "Test",
icon: "https://placeimg.com/250/250/people"
}
};
db.collection('fcmTokens').doc('token_id').get().then((doc) => {
console.log(doc.id, '=>', doc.data());
const data = doc.data();
token = data.token;
console.log("token", token);
})
.then(() => {
return event.data.ref.set({"title": "hello"}).sendToDevice(token, payload);
})
.catch((err) => {
console.log('Error getting documents', err);
return err;
});
});
你应该真正阅读many-to-many functionality of the ORM。文档非常清楚如何做这些事情。
如果你真的只想要所有的头衔,Sayse也有一个很好的答案。他们的回答还将元组中的所有内容组合在一起,并通过使用更少的数据库查询来提高效率。他们的答案是:item = []
bakerys = Bakery.objects.all()
for i in bakerys:
item.append(i.title)
for j in i.deliveryservice_set.all():
item.append(j.title)