Supponiamo che io ho tre modelli Django:modello di Django get_or_create con il campo 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)
Vorrei importare una grande quantità di dati Obj dove molti dei campi formati saranno identici. Tuttavia, dal momento che Obj ha un campo ManyToMany, non posso testare per l'esistenza come farei normalmente. Vorrei essere in grado di fare qualcosa del genere:
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()
Tuttavia, io non sono a conoscenza di un modo per ottenere un oggetto in questo modo, devi passare solo nei parametri di parole chiave, che non funzionano per ManyToManyFields.
C'è qualche buon modo per farlo? L'unica idea che ho avuto è quello di costruire un insieme di oggetti Q passare per ottenere:
myq = myq & Q(sizes__id=sizemodelN.id)
Ma io non sono sicuro che questo sarà anche il lavoro ...
Alla fine ho regolato un po 'il mio modello per ridurre il problema, anche se il problema fondamentale di abbinare molti a molti modelli esiste ancora. Ho finito per importare i dati come record separati (duplicati). Penso che quello che ho ottenuto dalle tue risposte e Justin è che non c'è una soluzione semplice a questo. Questo mi porta a credere che questa azione sia rara e quindi mi chiedo se non sia possibile progettare i modelli in modo diverso per evitare del tutto questo problema. – djs