我有这样的模特
class Book(models.Model):
title = models.CharField(max_length=254)
subtitle = models.CharField(max_length=254, null=True, blank=True)
subjects = models.ManyToManyField(Subject)
class Subject(models.Model):
name = models.CharField(max_length=255)
description = models.CharField(max_length=254, null=True, blank=True)
现在我做的时候
Book.objects.get_or_create(subjects=[2,4] , title='Genetics', subtitle='Theory of Genetics')
这里主题的价值是相关主题id的列表。
这给了我一个错误,说参数应该是字符串或数字TypeError
。
如何处理多个科目的情况?
答案 0 :(得分:1)
您使用__in运算符
Book.objects.filter(subjects__in=[2,4])
它也可以与查询集一起使用
Book.objects.filter(
subjects__in=Subject.objects.filter(name__contains="interesting"))
如果您想要使用两个主题预订,而不仅仅是任何,我们可以使用Q对象
Book.objects.filter( Q(subject__in=[2]) & Q(subject__in=[4]) )
请注意,任何运算符在逻辑上适合get_or_create,因为没有足够的信息可以创建,因此您可能需要将其拆分。