如何验证Django是否存在多人关系?
上面的代码不起作用,但它表明了我想做什么 简而言之,我想验证一个关系是否存在,如果它不存在,那么我添加这个关系。使用django模型实现这一点的有效方法是什么 谢谢。试试这个如何验证Django是否存在多人关系?,django,django-models,Django,Django Models,上面的代码不起作用,但它表明了我想做什么 简而言之,我想验证一个关系是否存在,如果它不存在,那么我添加这个关系。使用django模型实现这一点的有效方法是什么 谢谢。试试这个 class Interest(models.Model): name = models.CharField(max_length=255) class Person(models.Model): name = models.CharField(max_length=255) interests =
class Interest(models.Model):
name = models.CharField(max_length=255)
class Person(models.Model):
name = models.CharField(max_length=255)
interests = models.ManyToManyField(Interest, related_name='person_interests')
def add_interest(self, interest_pk):
interest = Interest.objects.get(pk=interest_pk)
if not interests in self.interests:
self.interests.add(interest)
试试这个
class Interest(models.Model):
name = models.CharField(max_length=255)
class Person(models.Model):
name = models.CharField(max_length=255)
interests = models.ManyToManyField(Interest, related_name='person_interests')
def add_interest(self, interest_pk):
interest = Interest.objects.get(pk=interest_pk)
if not interests in self.interests:
self.interests.add(interest)
如果您查看ManyRelatedManager
的功能,它已经满足了您的需求:
def add_interest(self, interest_pk):
interest = Interest.objects.get(pk=interest_pk)
if interest not in self.interests.all():
self.interests.add(interest)
它将删除through表中已存在的所有ID
。所以你真的不需要检查任何东西。您可以直接使用add
功能:
vals = (self.through._default_manager.using(db)
.values_list(target_field_name, flat=True)
.filter(**{
source_field_name: self.related_val[0],
'%s__in' % target_field_name: new_ids,
}))
new_ids = new_ids - set(vals)
当然,如果interest\u pk
还不存在,它会抛出错误,因为这是add
函数的基本要求。如果您查看ManyRelatedManager
的函数,它已经满足了您的需求:
def add_interest(self, interest_pk):
interest = Interest.objects.get(pk=interest_pk)
if interest not in self.interests.all():
self.interests.add(interest)
它将删除through表中已存在的所有ID
。所以你真的不需要检查任何东西。您可以直接使用add
功能:
vals = (self.through._default_manager.using(db)
.values_list(target_field_name, flat=True)
.filter(**{
source_field_name: self.related_val[0],
'%s__in' % target_field_name: new_ids,
}))
new_ids = new_ids - set(vals)
当然,如果
interest\u pk
还不存在,它会抛出错误,因为这是add
函数的基本要求。请检查这是否有帮助
def add_interest(self, interest_pk):
self.interests.add(interest_pk)
在这种情况下,,
请检查这是否有帮助
def add_interest(self, interest_pk):
self.interests.add(interest_pk)
在这种情况下,,
如何调用
add\u interest
方法?如何调用add\u interest
方法?