Предположим, у меня есть три Джанго модели:get_or_create модель Джанго с ManyToMany поле
class Section(models.Model):
name = models.CharField()
class Size(models.Model):
section = models.ForeignKey(Section)
size = models.IntegerField()
class Obj(models.Model):
name = models.CharField()
sizes = models.ManyToManyField(Size)
Я хотел бы импортировать большое количество данных Obj, где многие из полей размеры будут идентичны. Однако, поскольку Obj имеет поле ManyToMany, я не могу просто проверить существование, как обычно. Я хотел бы быть в состоянии сделать что-то вроде этого:
try:
x = Obj(name='foo')
x.sizes.add(sizemodel1) # these can be looked up with get_or_create
...
x.sizes.add(sizemodelN) # these can be looked up with get_or_create
# Now test whether x already exists, so I don't add a duplicate
try:
Obj.objects.get(x)
except Obj.DoesNotExist:
x.save()
Однако, я не знаю способа, чтобы получить объект таким образом, вы должны просто передать параметры ключевых слов, которые не работают для ManyToManyFields.
Есть ли хороший способ, я могу это сделать? Единственная идея, которую я имел, чтобы создать набор объектов Q пройти, чтобы получить:
myq = myq & Q(sizes__id=sizemodelN.id)
Но я не уверен, что это будет работать даже ...
Я в конечном счете скорректировал свою модель немного, чтобы уменьшить проблему, хотя фундаментальная проблема совпадения многих и многих моделей все еще существует. Я в конечном итоге импортировал данные в виде отдельных (дубликатов) записей. Я думаю, что я получил от ваших ответов и Джастина, что нет простого решения этого. Это заставляет меня полагать, что это действие необычно и, следовательно, вопрос, не могу ли я моделировать модели по-разному, чтобы вообще избежать этой проблемы. – djs