如何验证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 =

上面的代码不起作用,但它表明了我想做什么

简而言之,我想验证一个关系是否存在,如果它不存在,那么我添加这个关系。使用django模型实现这一点的有效方法是什么

谢谢。

试试这个

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
方法?