-1

下午好,

我的 django 服务器在顶部运行 REST api 来为我的移动设备提供服务。现在,在某个时候,移动设备将与 Django 进行通信。

假设设备要求 Django 在数据库中添加一个对象,并且在该对象中,我需要像这样设置一个 FK:

objectA = ObjectA.objects.create(title=title,
    category_id = c_id, order = order, equipment_id = e_id,
    info_maintenance = info_m, info_security = info_s,
    info_general = info_g, alphabetical_notation = alphabetical_notation,
    allow_comments = allow_comments,
    added_by_id = user_id,
    last_modified_by_id = user_id)

如果从我的移动设备接收到 e_id 和 c_id,我是否应该在调用此创建之前检查它们是否仍然存在于数据库中?那是两个额外的查询......但如果他们可以避免任何问题,我不介意!

非常感谢!

4

2 回答 2

1

它认为 Django 默认情况下会在外键上创建约束(尽管可能取决于数据库)。这意味着如果您的外键指向不存在的东西,那么保存将失败(导致 Python 端出现异常)。

于 2013-03-11T16:16:50.823 回答
0

您可以将其减少为单个查询(至少应该是单个查询,警告我尚未测试代码):

if MyObject.objects.filter(id__in=[e_id, c_id]).distinct().count() == 2:
    # create the object
    ObjectA.objects.create(...)
else:
    # objects corresponding e_id and c_id do not exist, do NOT create ObjectA

您应该始终验证来自用户或可以由确定的用户更改的任何信息。有人嗅探流量并开始构建他们自己的 REST 请求到您的服务器并不难。始终清理和验证添加到系统中的外部数据。

于 2013-03-11T16:20:43.493 回答