gpt4 book ai didi

python - 理解查询集,创建完美的数据库关系

转载 作者:行者123 更新时间:2023-12-01 05:12:38 25 4
gpt4 key购买 nike

我目前正在尝试找出基于一些模型构建数据库架构的最佳方法。我会尽力解释这一点,以便找到解决问题的最佳方法。

首先,我有 3 个“相关”模型

User 扩展为包含字段 api_keyCampaign 以及最后的 Beacon

用户可以有多个营销事件,但一个营销事件只能与一个用户相关这里的第一个选择是让 Campaign 有一个 User 的外键,如果我错了请纠正我,但我觉得这是最好的选择。同样,Campaign 可以有多个 Beacon,但一个 Beacon 一次只能与一个 Campaign 相关。再说一遍,我认为这里的外键效果最好。

当我尝试查询与任何给定 Campaign 相关的 Beacon 时,就会出现问题。我希望返回与 User 相关的所有 Beacon,同时获取 Campaign 的数据。

我希望返回如下所示的 JSON 字符串:

{
XXXX-YYYYY: {
message: "Hello World",
destination: "http://example.com"
}
XXXX-YYYYY: {
message: "Hello World",
destination: "http://example.com"
}
}

XXXX-YYYYY 为 Beacon.factory_id,消息/目的地为 Campaign.messageCampaign.destination

我认为 Queryset 就在这里,但我以前从未使用过它们,这让我很困惑。

最佳答案

根据你的问题,你有这样的事情:

 class User(models.Model):
pass

class Campaign(models.Model):
user = models.ForeignKey(User, verbose_name="Attached to")
message = models.CharField()
destination = models.CharField()

class Beacon(models.Model):
factory_id = models.CharField()
campaign = models.ForeignKey(Campaign, verbose_name="Campaign")

您可以follow ForeignKey "backward" ,通过使用 campaign_set 生成的属性:

If a model has a ForeignKey, instances of the foreign-key model will have access to a Manager that returns all instances of the first model. By default, this Manager is named FOO_set, where FOO is the source model name, lowercased.

因此您可以像这样查询您的 Beacon 模型:

beacon = Beacon.objects.get(factory_id="XXXX-YYYYY")
# Get every campaigns related and only relevant fields (in a list of dict)
campaigns = beacon.campaign_set.all().values('message', 'destination')

for campaign in campaigns:
print(campaign['message'])
print(campaign['destination'])

对于你的字典来说,不可能让它完全像这样。您不能有重复的 key 。

关于python - 理解查询集,创建完美的数据库关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23844773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com