मुझे पता है इस सवाल पुराना है और समय में डेटा माइग्रेशन के लिए सबसे अच्छा विकल्प दक्षिण उपयोग कर रहा था। अब Django का अपना migrate
कमांड है, और प्रक्रिया थोड़ा अलग है।
मैंने इन मॉडलों को books
नामक ऐप में जोड़ा है - तदनुसार समायोजित करें यदि यह आपका मामला नहीं है।
पहले, Book
के क्षेत्र जोड़ सकते हैं और एक related_name
कम से कम एक, या उन दोनों से (या वे संघर्ष करेंगे): अब
$ ./manage.py makemigrations
Migrations for 'books':
0002_auto_20151222_1457.py:
- Add field authors to book
- Alter field author on book
:
class Book(models.Model):
author = models.ForeignKey(Author, related_name='book')
authors = models.ManyToManyField(Author, related_name='books')
title = models.CharField(max_length=100)
प्रवास उत्पन्न , डेटा के माइग्रेशन को पकड़ने के लिए एक खाली माइग्रेशन बनाएं:
./manage.py makemigrations books --empty
Migrations for 'books':
0003_auto_20151222_1459.py:
और इसमें निम्नलिखित सामग्री जोड़ें। यह समझने के लिए कि यह कैसे काम करता है, Data Migrations पर दस्तावेज़ देखें। माइग्रेशन निर्भरता को ओवरराइट न करने के लिए सावधान रहें।
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
def make_many_authors(apps, schema_editor):
"""
Adds the Author object in Book.author to the
many-to-many relationship in Book.authors
"""
Book = apps.get_model('books', 'Book')
for book in Book.objects.all():
book.authors.add(book.author)
class Migration(migrations.Migration):
dependencies = [
('books', '0002_auto_20151222_1457'),
]
operations = [
migrations.RunPython(make_many_authors),
]
अब मॉडल से author
क्षेत्र निकालेगा - यह इस तरह दिखना चाहिए:
class Book(models.Model):
authors = models.ManyToManyField(Author, related_name='books')
title = models.CharField(max_length=100)
उस के लिए एक नया माइग्रेशन बनाएँ, और उन सभी को चलाने:
$ ./manage.py makemigrations
Migrations for 'books':
0004_remove_book_author.py:
- Remove field author from book
$ ./manage.py migrate
Operations to perform:
Synchronize unmigrated apps: messages, staticfiles
Apply all migrations: admin, auth, sessions, books, contenttypes
Synchronizing apps without migrations:
Creating tables...
Running deferred SQL...
Installing custom SQL...
Running migrations:
Rendering model states... DONE
Applying books.0002_auto_20151222_1457... OK
Applying books.0003_auto_20151222_1459... OK
Applying books.0004_remove_book_author... OK
और बस। पहले book.author
पर उपलब्ध लेखक अब से प्राप्त क्वेरीसेट में होना चाहिए।
यदि यह पहले से स्पष्ट नहीं है, तो सुनिश्चित करें कि आप किसी भी माइग्रेशन की कोशिश करने से पहले अपना डेटा बैक अप लें। सौभाग्य से, एसक्लाइट की प्रतिलिपि बनाना 'cp' कमांड –
के रूप में आसान है [दक्षिण] (http://south.aeracode.org/) देखें। – Zach
अधिक विशेष रूप से ट्यूटोरियल के "डेटा माइग्रेशन" अनुभाग को देखें: http://south.aeracode.org/wiki/Tutorial3 वैसे भी अपने सभी माइग्रेशन के लिए दक्षिण का उपयोग करना एक अच्छी आदत है। –