将多对多对象传递给变量

时间:2017-10-24 11:58:07

标签: python django orm

我有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)

我希望你能得到我想要完成的东西。我目前的观点'文件逻辑是错误的,我知道,我只是不知道我能做些什么来解决这个问题。谢谢你的时间。

1 个答案:

答案 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)