Mam model Django (o nazwie BiomSearchJob
), który jest obecnie aktywny i chcę dodać nową relację wiele do wielu, aby system był bardziej dostosowywany dla użytkownika. Wcześniej użytkownicy mogli przesłać zadanie bez określenia zestawu TaxonomyLevelChoices
, ale aby dodać więcej funkcji do systemu, użytkownicy powinni mieć teraz możliwość wyboru własnych poziomów systematyki.Retroaktywnie ustawić nowe wartości domyślne ManyToManyField na istniejący model
Oto model:
class TaxonomyLevelChoice(models.Model):
taxon_level = models.CharField(
verbose_name="Taxonomy Chart Level", max_length=60)
taxon_level_proper_name = models.CharField(max_length=60)
def __unicode__(self):
return self.taxon_level_proper_name
class BiomSearchJob(models.Model):
...
# The new many-to-many relation
taxonomy_levels = models.ManyToManyField(
'TaxonomyLevelChoice', blank=False, max_length=3,
default=["phylum", "class", "genus"])
name = models.CharField(
null=False, blank=False, max_length=100, default="Unnamed Job",
validators=[alphanumeric_spaces])
...
Obecnie wszystkie istniejące BiomSearchJobs
niejawnie mają trzy poziomy taksonomii wymienione w perspektywie default=
(które nie są wybierane przez użytkownika), a więc wszystkie są takie same w bazie danych. Po uruchomieniu migrate
stwierdzam, że poprzednie zadania nie mają od razu trzech relacji poziomu taksonomii, zwracają tylko pusty zestaw po wywołaniu job.taxonomy_levels.all()
(jeśli job
były instancją BiomSearchJob
).
Czy istnieje sposób retroaktywnego dodania tego związku bez ręcznego przechodzenia przez wszystko? Idealnie, po prostu uruchamiając migrate
chciałbym istniejące BiomSearchJobs
mieć phylum
, class
iwymienionych w atrybucie taxonomy_levels
.