【发布时间】:2013-05-19 19:29:03
【问题描述】:
我有以下型号:
class Item(models.Model):
# fields
# ...
class Collection(models.Model):
items = models.ManyToManyField(Item, related_name="collections")
# other fields
# ...
现在我想要两件事:
- 我想控制是否可以将
Item添加到Collection。 - 如果添加或删除了
Item,我希望Collection更新其部分字段。
对于第二个问题,我知道有django.db.models.signals.m2m_changed 可以用来挂钩关系的变化。是否允许/可以在信号回调中更改Collection?我可以使用该信号来“中止”问题 1 的插入吗?
【问题讨论】:
-
对于问题 1,您可能应该使用表单的清理周期来验证数据(这简化了验证消息传递),然后将其发送到 save_m2m
-
@Hedde:我更喜欢接近模型的解决方案,因为我的数据很可能不会从表单中更改。 (更有可能通过 CLI 工具和公开的 API)。
-
您可以覆盖模型保存方法,至少对于部分逻辑,但如果您正在实现 API,那么这种逻辑似乎属于 API 的授权层。 Tastypie 是一个非常丰富的 API,可以很好地与 Django 配合使用。
-
嗯,我的问题与user授权无关。是否允许
CollectionItem关系是应用程序逻辑。 -
我不是在谈论身份验证,但是像tastepie 这样的框架可以让您检查是否在某些条件下允许发布或放置(您可以自己指定)。跨度>
标签: django django-signals django-models