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)
上面的代码不起作用,但它表明了我想要做的事情。
简而言之,我想验证关系是否存在,如果不存在,则添加关系。使用django模型的有效方法是什么。
感谢。
答案 0 :(得分:3)
如果您查看ManyRelatedManager
的{{3}}功能,它已经在这里处理了您想要的内容:
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)
它会删除直通表中已存在的所有ids
。所以你真的不需要检查任何东西。您可以直接使用add
功能:
def add_interest(self, interest_pk):
self.interests.add(interest_pk)
当然,如果interest_pk
尚不存在,它会抛出错误,因为这是add
函数的基本要求。
答案 1 :(得分:2)
试试这个
def add_interest(self, interest_pk):
interest = Interest.objects.get(pk=interest_pk)
if interest not in self.interests.all():
self.interests.add(interest)
答案 2 :(得分:1)
请检查这是否有帮助。
person = Person.objects.filter(name = 'something):
if person.count() > 0:
interests = person[0].interests.all()
if interests.count() > 0:
###DO something..
def add_interest(self, interest_pk):
interests = self.interests.all()
if interests.count():
### Add