Tôi có một mô hình Django (gọi là BiomSearchJob
) hiện đang hoạt động và tôi muốn thêm mối quan hệ nhiều-nhiều mới để làm cho hệ thống có thể tùy chỉnh hơn cho người dùng. Trước đây, người dùng có thể gửi một công việc mà không chỉ định một tập hợp các TaxonomyLevelChoices
nhưng để thêm nhiều tính năng hơn cho hệ thống, người dùng bây giờ có thể chọn mức phân loại riêng của họ.Retroactively đặt giá trị mặc định ManyToManyField mới thành kiểu hiện tại
Dưới đây là mô hình:
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])
...
Hiện nay, tất cả BiomSearchJobs
ngầm có ba cấp độ phân loại hiện niêm yết trong thời gian default=
(mà không phải là người sử dụng có thể lựa chọn) và do đó đều như nhau trong cơ sở dữ liệu. Sau khi chạy migrate
, tôi thấy rằng các công việc trước đó không ngay lập tức có ba quan hệ phân loại cấp, chúng chỉ trả lại một tập rỗng khi gọi job.taxonomy_levels.all()
(nếu job
là một phiên bản BiomSearchJob
).
Có cách nào để thêm lại mối quan hệ này một cách hiệu quả mà không cần phải thực hiện mọi thứ theo cách thủ công không? Lý tưởng nhất là, chỉ cần chạy migrate
Tôi muốn có BiomSearchJobs
hiện có để có phylum
, class
và genus
được liệt kê trong thuộc tính taxonomy_levels
.