Django models Django模型-在保存之前有条件地将对象添加到ManyToManyField
以下内容并不完全有效,其目的是: 保存后,检查“操作员”中是否存在“主管”,如果不存在,也将其添加到他们中Django models Django模型-在保存之前有条件地将对象添加到ManyToManyField,django-models,Django Models,以下内容并不完全有效,其目的是: 保存后,检查“操作员”中是否存在“主管”,如果不存在,也将其添加到他们中 class JobRecord(models.Model): """JobRecord model""" project = models.ForeignKey(Project) date = models.DateField() supervisor = models.Foreign
class JobRecord(models.Model):
"""JobRecord model"""
project = models.ForeignKey(Project)
date = models.DateField()
supervisor = models.ForeignKey(User, related_name='supervisor_set')
operators = models.ManyToManyField(User, related_name='operators_set', help_text='Include the supervisor here also.')
vehicles = models.ManyToManyField(Vehicle, blank=True, null=True)
def __unicode__(self):
return u"%s - %s" % (self.project.name, self.date.strftime('%b %d'))
# --- over ride methods ---- #
def save(self, **kwargs):
# this must be done to get a pk
super(JobRecord, self).save(**kwargs)
# which makes this comparison possible
if self.supervisor not in self.operators.__dict__:
self.operators.add(self.supervisor)
# it seems to get this far ok, but alas, the second save attempt
# does not seem to work!
print self.operators.values()
super(JobRecord, self).save(**kwargs)
感谢您的专业知识,您将成为“专家” 您可以这样做来检查主管是否在操作员中:
if self.operators.filter(id=self.supervisor.id).count() == 0:
修改多对多字段后,无需再次保存。(多对多关系存储在它们自己的表中。)好的,我已经修改了,使之成为以下内容。事实上,这两个条件似乎都起到了作用。现在的问题是add()方法不适合我
#...
def save(self, **kwargs):
super(JobRecord, self).save(**kwargs)
if self.operators.filter(id=self.supervisor.id).count() == 0:
#if self.supervisor not in self.operators.values():
# either conditional will get to this point
self.operators.add(self.supervisor) # <-- this line doesn't save proper?
#。。。
def保存(自身,**kwargs):
超级(作业记录,自我)。保存(**kwargs)
如果self.operators.filter(id=self.supervisor.id).count()=0:
#如果self.supervisor不在self.operators.values()中:
#任何一个条件都会达到这一点
self.operators.add(self.supervisor)#我也有同样的问题。如果您使用的是django表单,请在保存表单后进行检查,然后将多对多添加到其中。这是我绕过它的唯一方法。只是一个随机的代码评论。如果在if和dedent之后移动super().save()方法,则只需调用它一次。。。条件行得通,但是add()方法没有完全破解它?你确定它没有添加吗?你有例外吗?尝试打印self.operators.all()。您可能需要查看多对多api的用法: