我有以下型号:
class Channel(models.Model):
tags = models.ManyToManyField(Tag)
class Tag(models.Model):
name = models.CharField( primary_key = True)
并希望get_or_create
一个具有完全给定标记集的频道。
tags = map(lambda x: Tag.objects.get(name = x), ['tag1', 'tag2'])
channel = Channel.objects.get_or_create(tags = tags) # Here's the bug
修改:问题出现在create
部分,因为
Channel.objects.get(tags=tags)
工作得很好。所以这是保存多种关系的常见问题。
答案 0 :(得分:1)
在这种情况下,我认为你不能使用get_or_create。您需要分多步执行此操作:
例如:
tags = ['tag1', 'tag2']
channel = reduce(lambda channel_filter, x: channel_filter.filter(tags__name=x), tags, Channel.objects) # not checking if only one objetct is returned
if not channel:
channel = Channel()
channel.save()
map(channel.tags.add, [Tag.objects.get(name = x) for x in tags])
答案 1 :(得分:0)
如下:
tags = Tag.objects.filter(name__in=['tag1', 'tag2'])
channel = Channel.objects.get_or_create(tags=tags)