Django菜鸟问题。我有以下模型:
class Leg(models.Model):
drive_date = models.DateField()
startpoint = models.CharField(max_length=50)
endpoint = models.CharField(max_length=50)
start_time = models.TimeField()
riders = models.ManyToManyField(Rider, blank=True)
drivers = models.ManyToManyField(Driver, blank=True)
carpool = models.ForeignKey(Carpool, blank=True, null=True)对于Leg的某些实例,我希望从Leg模型中删除任何现有的骑手和驾驶员,但不会分别从骑手或驾驶员模型(未显示)中删除它们。我不知道该怎么做。当我使用以下命令迭代时:
for driver in leg.drivers.all():
driver.delete()它似乎删除了实际的驱动程序对象,这是我不想做的。
任何帮助都是非常感谢的。谢谢!
发布于 2012-02-26 12:33:43
我可能采用的一种方法是为驱动程序模型创建一个自定义管理器。下面是未经测试的代码:
from django.db import models
class DriverManager(models.Manager):
def get_query_set(self):
return super(DriverManager, self).get_query_set().filter(removed=False)
class Driver(models.Model):
# new stuff to add ...
removed = models.BooleanField(default=False)
objects = models.Manager() # default manager
active = DriverManager() # custom manager说明:在Driver模型中添加了一个新字段removed。不是删除记录,而是将其设置为True并保存。然后,在通常情况下过滤Driver.objects的地方,使用Driver.active。
发布于 2013-04-11 18:43:15
从关系中删除项的正确代码是:
for driver in leg.drivers.all():
leg.drivers.remove( driver )发布于 2016-10-27 14:24:03
执行此操作
leg.drivers.clear()
.clear() to completely remove completely(efficiently)
.remove(<related obj>) to remove one relation
.remove([<related obj>, <related obj>...]) to remove one or more relationhttps://stackoverflow.com/questions/9449931
复制相似问题