我了解它希望我在访问 M2M 字段之前进行保存。我不想保存模型。我正在使用一个名为 TaskSearchCriteria 的模型来搜索任务。用户可以选择将标准保存到数据库中以供将来搜索。但是应该可以在不保存条件的情况下进行一次性搜索。这是我的模型。
class TaskSearchCriteria(models.Model):
name = models.CharField(max_length=256)
task_name = models.CharField(max_length=256, blank=True, null=True)
project = models.ForeignKey(Project, blank=True, null=True)
sprint = models.ForeignKey(Sprint, blank=True, null=True)
type = models.ForeignKey(TaskType, blank=True, null=True)
priority = models.ForeignKey(Priority, blank=True, null=True)
status = models.ForeignKey(Status, blank=True, null=True)
description = models.CharField(max_length=1024, blank=True, null=True)
owner = models.ForeignKey(User)
users = models.ManyToManyField(User, related_name='a+')
def get_param_dict(self):
retval = dict()
if self.task_name != None and len(self.task_name) > 0:
retval["name__contains"] = self.task_name
if self.project != None:
retval["project__id"] = self.project.pk
if self.sprint != None:
retval["sprint__id"] = self.sprint.pk
if self.type != None:
retval["type__id"] = self.type.pk
if self.priority != None:
retval["priority__id"] = self.priority.pk
if self.status != None:
retval["status__id"] = self.status.pk
if self.description != None and len(self.description) > 0:
retval["description__contains"] = self.description
if self.users != None and len(self.users) > 0: #**ERROR HERE**
ids = [user.pk for user in self.users]
retval["users__in"] = ids
return retval
我使用模型表单来创建模型并运行 get_param_dict() 方法来创建用于 model.object.filter() 的字典。是否可以在不保存到数据库的情况下使用 m2m 字段?