oro*_*aki 5 django django-models
我有两个型号:
class Client(models.Model):
some_field = models.CharField()
class Ticket(models.Model):
client = models.ForeignKey(Client)
Run Code Online (Sandbox Code Playgroud)
Tickets 在我的系统中是永远的,但我希望用户能够删除他们不再需要的客户端.目前它将删除由该创建的所有票证Client.
not_needed或者其他东西?delete()为每个执行此操作的模型覆盖,但是如果必须的话(如果这是唯一的方法,那么最好的方法是什么).该django.contrib.auth模块必须在User模型中处理同样的问题.他们的解决方案是:
class User(models.Model):
# ...
is_active = models.BooleanField(default=True)
# ...
Run Code Online (Sandbox Code Playgroud)
所以"删除"a User只是设置is_active为False.与Users 兼容的所有东西都需要检查is_active.
为了记录,我认为Client在这种情况下删除s是一个坏主意.
但是为了争论,如果你删除a Client,那么它的相关Tickets需要首先变成无客户端.将模型更改为Ticket:
class Ticket(models.Model):
client = models.ForeignKey(Client, null=True, blank=True,
related_name='tickets')
Run Code Online (Sandbox Code Playgroud)
然后,删除a Client,执行:
for ticket in clientToDelete.tickets:
ticket.client = None
ticket.save()
clientToDelete.delete()
Run Code Online (Sandbox Code Playgroud)
你可以把这个代码进入Client的delete方法,但是如果你做一团(即查询集为基础),删除它会得到跳过Client秒.
| 归档时间: |
|
| 查看次数: |
5418 次 |
| 最近记录: |