Django 1.7 - makemigrations ไม่พบการเปลี่ยนแปลง


140

ตามที่ชื่อบอกว่าฉันไม่สามารถย้ายข้อมูลได้

แอพนี้มีอายุต่ำกว่า 1.6 ดังนั้นฉันเข้าใจว่าการย้ายข้อมูลจะไม่อยู่ที่นั่นในตอนแรกและแน่นอนถ้าฉันเรียกใช้python manage.py migrateฉันจะได้รับ:

Operations to perform:
  Synchronize unmigrated apps: myapp
  Apply all migrations: admin, contenttypes, auth, sessions
Synchronizing apps without migrations:
  Creating tables...
  Installing custom SQL...
  Installing indexes...
Running migrations:
  No migrations to apply.

ถ้าฉันทำการเปลี่ยนแปลงกับโมเดลใด ๆmyappมันก็ยังคงบอกว่าไม่มีการย้ายตามที่คาดไว้

แต่ถ้าฉันวิ่งpython manage.py makemigrations myappฉันจะได้รับ:

No changes detected in app 'myapp'

ดูเหมือนจะไม่สำคัญว่าฉันจะเรียกใช้คำสั่งอะไรหรืออย่างไรมันไม่เคยตรวจพบแอปว่ามีการเปลี่ยนแปลงหรือไม่เพิ่มไฟล์การย้ายข้อมูลใด ๆ ลงในแอพ

มีวิธีใดที่จะบังคับให้แอปเข้าสู่การย้ายข้อมูลและพูดว่า "นี่คือฐานการทำงานของฉัน" หรืออะไรก็ตาม? หรือว่าฉันขาดอะไรไป?

ฐานข้อมูลของฉันคือ PostgreSQL หากว่ามันช่วยได้เลย


โซลูชันที่นำเสนอไม่ทำงานสำหรับฉันดังนั้นนี่คือโซลูชันของฉันหากใครประสบปัญหาเดียวกัน! 1. ลบไฟล์การย้ายข้อมูลในแอพทั้งหมด 2. ลบฐานข้อมูลและสร้างใหม่อีกครั้ง 3. รันคำสั่ง makemigrations และย้ายคำสั่ง PS ลองขั้นตอนที่ 1 และ 3 ก่อน หากยังคงมีข้อผิดพลาดทำตามขั้นตอนที่ 1-3
Amoroso

คำตอบ:


187

หากคุณเปลี่ยนจากแอพที่มีอยู่ที่คุณทำใน django 1.6 คุณต้องทำขั้นตอนหนึ่งขั้นตอน (ตามที่ฉันค้นพบ) ที่ระบุไว้ในเอกสารประกอบ:

หลาม Manage.py makemigrations your_app_label

เอกสารไม่ชัดเจนว่าคุณต้องเพิ่มป้ายกำกับแอพลงในคำสั่งเนื่องจากสิ่งแรกที่คุณบอกให้ทำคือpython manage.py makemigrationsสิ่งที่จะล้มเหลว การโยกย้ายครั้งแรกเสร็จสิ้นเมื่อคุณสร้างแอปของคุณในรุ่น 1.7 แต่ถ้าคุณมาจาก 1.6 จะไม่ได้รับการดำเนินการ ดู'การเพิ่มการย้ายข้อมูลไปยังแอพ'ในเอกสารประกอบสำหรับรายละเอียดเพิ่มเติม


1
คำตอบที่ดีสำหรับคนที่มาจาก Django 1.6! ขอบคุณ!
David D.

1
ถ้าฉันมีมากกว่าหนึ่งแอพล่ะ ฉันควรจะต้องpython manage.py makemigrations APP_LABELสำหรับแต่ละคน?
Alston

1
ภายใต้ Django 1.9 ที่นี่และแอปของฉันถูกสร้างขึ้นด้วย./manage.py startappแต่ฉันยังคงต้องพูดถึงป้ายกำกับอย่างชัดเจน
maxbellec

50

สิ่งนี้อาจเกิดขึ้นเนื่องจากเหตุผลดังต่อไปนี้:

  1. คุณไม่ได้เพิ่มแอพในINSTALLED_APPSรายการในsettings.py (คุณต้องเพิ่มชื่อแอพหรือพา ธ ไปยังคลาสย่อยของ AppConfig ใน apps.py ในโฟลเดอร์แอปขึ้นอยู่กับเวอร์ชันของ django ที่คุณใช้) เอกสารอ้างอิง: INSTALLED_APPS
  2. คุณไม่มีmigrationsโฟลเดอร์ในแอพเหล่านั้น (โซลูชัน: เพียงสร้างโฟลเดอร์นั้น)
  3. คุณไม่มี__init__.pyไฟล์ในmigrationsโฟลเดอร์ของแอพเหล่านั้น (โซลูชัน: เพียงสร้างไฟล์ว่างที่มีชื่อ__init__.py )
  4. คุณไม่มี__init__.pyไฟล์ในโฟลเดอร์แอพ (โซลูชัน: เพียงสร้างไฟล์ว่างที่มีชื่อ__init__.py )
  5. คุณไม่มีmodels.pyไฟล์ในแอป
  6. คลาส Python ของคุณ (ควรเป็นแบบจำลอง) ในmodels.pyไม่ได้รับมรดกdjango.db.models.Model
  7. คุณมีข้อผิดพลาดทางความหมายในคำจำกัดความของโมเดลใน models.py

หมายเหตุ: ข้อผิดพลาดทั่วไปคือการเพิ่มmigrationsโฟลเดอร์ใน.gitignoreไฟล์ เมื่อโคลนจาก repo ระยะไกลmigrationsโฟลเดอร์และ / หรือ__init__.pyไฟล์จะหายไปใน repo ท้องถิ่น ซึ่งทำให้เกิดปัญหา

ฉันแนะนำให้ gitignore ไฟล์การโยกย้ายโดยเพิ่มบรรทัดต่อไปนี้ไปยัง.gitignoreไฟล์

*/migrations/*
!*/migrations/__init__.py

1
ฉันได้โคลนโครงการของฉันและโฟลเดอร์การย้ายข้อมูลไม่ได้ถูกส่งไปยัง repo ดังนั้นฉันต้องเพิ่มผู้กำกับการย้ายข้อมูลจากนั้นฉันเพิ่มinit .py และฉันสามารถทำการย้ายข้อมูลได้ ขอบคุณ
Junaid

ฉันลบเนื้อหาของโฟลเดอร์ / migrations ของฉันเพื่อ "รีเซ็ต" สิ่งต่าง ๆ ในโครงการที่ฉันยังไม่ได้ปรับใช้ ฉันลบ__init__.pyโฟลเดอร์พร้อมกับการย้ายข้อมูลโดยไม่ได้ตั้งใจ
เซท

สิ่งนี้ทำเพื่อฉัน .... You don't have __init__.py file inside migrations folder of those apps. (Solution: Just create an empty file with name __init__.py).. และมันเกิดจากการเพิ่มไฟล์ไปยัง.gitignore
lukik

1
ทำไมไฟล์init .py มีความสำคัญในโฟลเดอร์การย้ายข้อมูล จะทำการโยกย้ายที่ไหนฉันจะขุดลึกลงไปสำหรับตรรกะนี้
Nimish Bansal

1
@NimishBansal ต้องการ__init__.pyไฟล์Python 3.3 ในไดเรกทอรีเพื่อรับมันเป็นแพคเกจหลาม ดูนี่
โมฮัมเหม็ด Shareef C

29

ตกลงดูเหมือนว่าฉันพลาดขั้นตอนที่ชัดเจน แต่โพสต์สิ่งนี้ในกรณีที่คนอื่นทำเหมือนกัน

เมื่ออัปเกรดเป็นรุ่น 1.7 โมเดลของฉันไม่ได้รับการจัดการ ( managed = False) - ฉันมีมันเหมือนTrueแต่ก่อนดูเหมือนว่าจะถูกเปลี่ยน

การลบบรรทัดนั้น (เป็นค่าเริ่มต้นเป็น True) จากนั้นเรียกใช้makemigrationsสร้างโมดูลการโยกย้ายทันทีและตอนนี้ก็กำลังทำงาน makemigrationsจะไม่ทำงานบนตารางที่ไม่มีการจัดการ (ซึ่งชัดเจนในการเข้าใจถึงปัญหาหลังเหตุการณ์)


4
โปรดอธิบาย - คุณเปลี่ยน / เพิ่ม "managed = False" ที่ไหน? ฉันมีปัญหาเดียวกัน
Ycon

1
ฉันไม่มีรหัสนั้นอีกต่อไป แต่ฉันคิดว่าเป็นคุณสมบัติของคลาสถ้าฉันจำได้อย่างถูกต้อง
TyrantWave

1
จุดดี. โปรดทราบว่าmanage.py inspectdbเพิ่ม Manage = False! ในกรณีที่คุณนำเข้าฐานข้อมูลดั้งเดิมคุณจะต้องปรับแต่งอย่างระมัดระวัง!
Alessandro Dentella

@TyrantWave คุณบันทึกวันของฉัน ขอบคุณมาก.
Utkarsh Sharma

ตรวจสอบให้แน่ใจว่าapp_labelเป็นแบบเดียวกัน
Luv33preet

19

โซลูชันของฉันไม่ครอบคลุมที่นี่ดังนั้นฉันโพสต์ไว้ ฉันใช้syncdbสำหรับโครงการ - เพื่อเริ่มใช้งาน จากนั้นเมื่อฉันพยายามที่จะเริ่มใช้การย้ายถิ่นของ Django มันจะแกล้งพวกเขาในตอนแรกแล้วจะบอกว่ามันเป็น 'ตกลง' แต่ไม่มีอะไรเกิดขึ้นกับฐานข้อมูล

โซลูชันของฉันคือเพียงแค่ลบไฟล์การย้ายข้อมูลทั้งหมดสำหรับแอพของฉันเช่นเดียวกับบันทึกฐานข้อมูลสำหรับการย้ายข้อมูลแอปในdjango_migrationsตาราง

จากนั้นฉันเพิ่งย้ายข้อมูลเริ่มต้นด้วย:

./manage.py makemigrations my_app

ติดตามโดย:

./manage.py migrate my_app

ตอนนี้ฉันสามารถทำการย้ายถิ่นได้โดยไม่มีปัญหา


FYI: มันสำคัญมากที่เขาพูดที่นี่"ไฟล์รวมถึงบันทึกฐานข้อมูล" หากคุณลบบันทึกฐานข้อมูล แต่ไม่ใช่ไฟล์เช่นกัน (ยกเว้น__init.py__จะไม่สามารถใช้งานได้
Mike Robinson

15

เห็นด้วยกับ @furins หากดูเหมือนว่าทุกอย่างจะเป็นไปตามลำดับ แต่ปัญหานี้ก็เกิดขึ้นให้เช็คเอาท์หากมีวิธีการของคุณสมบัติใด ๆ ที่มีชื่อเดียวกับแอตทริบิวต์ที่คุณพยายามเพิ่มลงในคลาสรุ่น

  1. ลบวิธีการที่มีชื่อคล้ายกับแอตทริบิวต์ที่คุณกำลังเพิ่ม
  2. Manage.py makemigrations my_app
  3. Manage.py โอนย้าย my_app
  4. เพิ่มวิธีการกลับ

11

นี่เป็นข้อผิดพลาดที่โง่ที่จะทำ แต่การมีเครื่องหมายจุลภาคพิเศษในตอนท้ายของบรรทัดการประกาศฟิลด์ในคลาสโมเดลทำให้บรรทัดไม่มีผล

มันเกิดขึ้นเมื่อคุณคัดลอกวาง def จากการโยกย้ายซึ่งตัวเองถูกกำหนดให้เป็นอาร์เรย์

แม้ว่านี่อาจจะช่วยบางคน :-)


1
ความคิดเห็นของคุณช่วยให้ฉันพบปัญหาของฉัน! ฉันไม่มีจุลภาคในตอนท้ายของตัวเลือกสุดท้ายในรายการตัวเลือก .. โดยปกติแล้ว Django นั้นช่างน่าใจหายมาก
Maxim

1
@ Maxax: นั่นไม่น่าจะเป็นสาเหตุของปัญหาของคุณ: รายการที่ไม่มีเครื่องหมายจุลภาคตอนท้ายยังคงเป็นรายการ อีกเรื่องหนึ่งคือสิ่งอันดับถ้าคุณมีเพียง 1 องค์ประกอบในสิ่งอันดับคุณต้องใช้เครื่องหมายจุลภาคหลังจากนั้น
blueFast

เพื่อนที่ช่วยฉันได้มากเวลา! @dangonfast: ในนิยามของ Model มันเป็นปัญหาแน่นอน
MrE

11

บางทีฉันอาจจะสายเกินไป แต่คุณพยายามที่จะมีmigrationsโฟลเดอร์ในแอพของคุณพร้อม__init__.pyไฟล์อยู่หรือไม่?


1
หากคุณมี "makemigrations" นี้จะสร้างการย้ายข้อมูลสำหรับแอป มิฉะนั้นก็จะทำให้คุณต้องทำงาน makemigrations app_name (ซึ่งจะสร้างไฟล์เหล่านี้)
สกอตต์วอร์เรน

7

บางทีนี่อาจช่วยใครซักคน ฉันใช้แอพที่ซ้อนอยู่ project.appname และจริง ๆ แล้วฉันมี project และ project.appname ใน INSTALLED_APPS การลบโครงการออกจาก INSTALLED_APPS อนุญาตให้ตรวจพบการเปลี่ยนแปลง


7

คำตอบอยู่ที่โพสต์สแต็คโอเวอร์โฟลว์นี้โดย cdvv7788 Migrations ใน Django 1.7

หากเป็นครั้งแรกที่คุณย้ายแอพนั้นคุณต้องใช้:

Manage.py makemigrations myappname เมื่อคุณทำสิ่งที่คุณสามารถทำได้:

Manage.py โยกย้ายหากคุณมีแอปของคุณในฐานข้อมูลให้แก้ไขโมเดลและไม่อัปเดตการเปลี่ยนแปลงเกี่ยวกับการเปลี่ยนแปลงเล็กน้อยคุณอาจไม่ได้ย้ายเลย เปลี่ยนแบบจำลองของคุณกลับเป็นรูปแบบดั้งเดิมเรียกใช้คำสั่งแรก (ด้วยชื่อแอป) และย้าย ... มันจะปลอม เมื่อคุณดำเนินการแก้ไขการเปลี่ยนแปลงในแบบจำลองของคุณแล้วให้เรียกใช้การอัปเดตและโยกย้ายอีกครั้งและควรทำงาน

ฉันมีปัญหาเดียวกันที่แน่นอนและการทำงานข้างต้นทำงานได้อย่างสมบูรณ์แบบ

ฉันย้ายแอพ django ของฉันไปที่ cloud9 และด้วยเหตุผลบางอย่างที่ฉันไม่เคยได้เห็นการโยกย้ายครั้งแรก


7

ทำงานต่อไปนี้สำหรับฉัน:

  1. เพิ่มชื่อแอปใน settings.py
  2. ใช้ 'python Manage.py makemigrations'
  3. ใช้ 'python Manage.py โยกย้าย'

ทำงานให้ฉัน: Python 3.4, Django 1.10


6

คนอย่างฉันที่ไม่ชอบการย้ายข้อมูลสามารถใช้ขั้นตอนด้านล่าง

  1. ลบการเปลี่ยนแปลงที่คุณต้องการซิงค์
  2. เรียกใช้python manage.py makemigrations app_labelสำหรับการโยกย้ายครั้งแรก
  3. เรียกใช้python manage.py migrateสำหรับสร้างตารางก่อนที่จะทำการเปลี่ยนแปลง
  4. วางการเปลี่ยนแปลงที่คุณลบในขั้นตอนแรก
  5. รัน 2 และ 3 ขั้นตอน

หากคุณสับสนขั้นตอนใด ๆ เหล่านี้ให้อ่านไฟล์การโยกย้าย เปลี่ยนเพื่อแก้ไขสคีมาของคุณหรือลบไฟล์ที่ไม่ต้องการ แต่อย่าลืมเปลี่ยนส่วนการอ้างอิงของไฟล์การย้ายถัดไป;)

ฉันหวังว่านี่จะช่วยให้ใครบางคนในอนาคต


5

คุณต้องการตรวจสอบsettings.pyในINSTALLED_APPSรายการและตรวจสอบให้แน่ใจว่าแอพทั้งหมดที่มีรุ่นนั้นแสดงรายการอยู่ในนั้น

การรันmakemigrationsในโฟลเดอร์โปรเจ็กต์หมายความว่าจะมีการอัพเดตตารางทั้งหมดที่เกี่ยวข้องกับแอพทั้งหมดที่รวมอยู่ในsettings.pyโครงการ เมื่อคุณรวมแล้วmakemigrationsแอปจะรวมแอปโดยอัตโนมัติ (ซึ่งจะช่วยประหยัดงานได้มากดังนั้นคุณไม่ต้องเรียกใช้makemigrations app_nameแอพทุกแอปในโครงการ / ไซต์ของคุณ)


5

ในกรณีที่คุณมีฟิลด์เฉพาะที่ไม่ได้รับการระบุโดยการทำ makemigrations: ตรวจสอบสองครั้งถ้าคุณมีคุณสมบัติที่มีชื่อเดียวกัน

ตัวอย่าง:

field = django.db.models.CharField(max_length=10, default = '', blank=True, null=True)

# ... later

@property
def field(self):
    pass

คุณสมบัติจะ "เขียนทับ" คำจำกัดความของเขตข้อมูลดังนั้นการเปลี่ยนแปลงจะไม่ถูกระบุด้วย makemigrations


คนเกียจคร้านที่เกี่ยวข้องคือการมีเขตข้อมูลที่ไม่ถูกต้องที่ยังคงหนีการตรวจสอบ / ตรวจสอบ ฉันกำหนดhourly_rate = models.DecimalField(ไม่มีส่วนต่อท้าย '()') และมันล้มเหลวอย่างเงียบ ๆ
ปราชญ์

5

abstractตรวจสอบให้แน่ใจรูปแบบของคุณไม่ได้ ฉันทำผิดพลาดจริงและใช้เวลาสักครู่ดังนั้นฉันจึงคิดว่าฉันจะโพสต์


4

การเพิ่มคำตอบนี้เพราะวิธีการนี้เท่านั้นที่ช่วยฉัน

ฉันลบmigrationsวิ่งโฟลเดอร์และmakemigrations มันยังกล่าวว่า: ไม่มีการโยกย้ายเพื่อนำไปใช้migrate

ฉันไปที่migrateโฟลเดอร์และเปิดไฟล์ที่สร้างขึ้นล่าสุด
แสดงความคิดเห็นการย้ายข้อมูลที่ฉันต้องการ (ตรวจพบและเข้าสู่ที่นั่น)
และเรียกใช้migrateอีกครั้ง

โดยทั่วไปการแก้ไขไฟล์การโยกย้ายด้วยตนเอง
ทำสิ่งนี้เฉพาะเมื่อคุณเข้าใจเนื้อหาของไฟล์


1
ขอบคุณมาก! สิ่งนี้ช่วยได้
Sharpless512

3

คุณใช้schemamigration my_app --initialหลังจากเปลี่ยนชื่อโฟลเดอร์การโยกย้ายเก่าหรือไม่ ลองมัน. อาจทำงานได้ ถ้าไม่ใช่ - ลองสร้างฐานข้อมูลและสร้าง syncdb + โยกย้าย มันใช้งานได้สำหรับฉัน ...


10
ไม่มีคำสั่งschemamigration- ฉันคิดว่าเป็นส่วนหนึ่งของภาคใต้หรือไม่ ฉันยังไม่มีโฟลเดอร์การโยกย้ายเลย ดูเหมือนว่าการลบของฉันmodels.pyและการinspectdbทำซ้ำไม่ได้ทำอะไรเลย
TyrantWave

2
schemamigrationมาจากทางใต้ makemigrationsมันคือการเปลี่ยน
Craig Labenz

2
ยังคงใช้ได้อยู่ แต่มันเปลี่ยนเป็นmakemigrations --empty
Iulius Curt

2

มีปัญหาเดียวกัน ตรวจสอบให้แน่ใจว่าคลาสใดก็ตามที่คุณกำหนดไว้ใน models.py คุณต้องสืบทอดโมเดลคลาสโมเดล

class Product(models.Model):
    title = models.TextField()
    description = models.TextField()
    price = models.TextField()

1

ฉันมีปัญหาเดียวกันกับที่ต้องทำงาน makemigrations สองครั้งและพฤติกรรมแปลก ๆ ทุกประเภท มันกลับกลายเป็นว่ารากของปัญหาคือฉันกำลังใช้ฟังก์ชั่นเพื่อกำหนดวันที่เริ่มต้นในแบบจำลองของฉันดังนั้นการย้ายข้อมูลจะตรวจพบการเปลี่ยนแปลงทุกครั้งที่ฉันทำการทดสอบ คำตอบสำหรับคำถามนี้ทำให้ฉันถูกทาง: หลีกเลี่ยงการทำ makemigrations เพื่อสร้างฟิลด์วันที่ขึ้นมาใหม่


1

ฉันเพิ่งอัพเกรด Django จาก 1.6 เป็น 1.8 และมีแอพและการย้ายข้อมูลน้อยมากสำหรับพวกเขา ฉันใช้ทิศใต้และschemamigrationsสร้างการย้ายถิ่นใน Django 1.6 ซึ่งลดลงใน Django 1.8

เมื่อฉันเพิ่มโมเดลใหม่หลังจากอัปเกรดmakemigrationsคำสั่งไม่พบการเปลี่ยนแปลงใด ๆ และจากนั้นฉันลองวิธีแก้ปัญหาที่ @drojf (คำตอบที่ 1) ทำงานได้ดี แต่ไม่สามารถใช้การโยกย้ายครั้งแรกปลอม ( python manage.py --fake-initial) ฉันทำสิ่งนี้เพราะโต๊ะของฉัน (โต๊ะเก่า) ถูกสร้างขึ้นแล้ว

สุดท้ายนี้ทำงานให้ฉันออกรุ่นใหม่ (หรือเปลี่ยนแปลงรูปแบบ) จาก models.py และจากนั้นก็จะลบ (หรือเปลี่ยนชื่อสำหรับการสำรองข้อมูลความปลอดภัย) การโยกย้ายโฟลเดอร์ปพลิเคชันทั้งหมดและเรียกหลามmanage.pymakemigrations python manage.py migrate --fake-initialปพลิเคชันทั้งหมดแล้วได้ สิ่งนี้ได้ผลเหมือนมนต์เสน่ห์ เมื่อการโอนย้ายเริ่มต้นถูกสร้างขึ้นสำหรับแอปทั้งหมดและทำการโอนย้ายครั้งแรกปลอมจากนั้นเพิ่มโมเดลใหม่makemigrationsและโอนย้ายในแอปนั้น ตรวจพบการเปลี่ยนแปลงในขณะนี้และทุกอย่างเรียบร้อยดี

ฉันแค่คิดถึงการแชร์ที่นี่หากมีใครประสบปัญหาเดียวกัน (มีแอพอยู่schemamigrationsทางใต้) อาจช่วยพวกเขาได้ :)


1

บางทีนั่นอาจช่วยให้ใครบางคนฉันมีปัญหาเดียวกัน

ฉันได้สร้างตารางสองตารางด้วยคลาส serializer และมุมมอง ดังนั้นเมื่อฉันต้องการอัปเดตฉันมีข้อผิดพลาดนี้

ฉันทำตามขั้นตอนนี้:

  1. ฉันทำ .\manage.py makemigrations app
  2. ฉันทำ .\manage.py migrate
  3. ฉันลบทั้งสองตารางของฉัน models.py
  4. ฉันลบการอ้างอิงถึงตารางทั้งหมดของฉันจาก serializer และดูคลาส
  5. ผมดำเนินการขั้นตอนและ12
  6. ฉันเรียกการเปลี่ยนแปลงของฉันได้ใน models.py
  7. 5ผมดำเนินการขั้นตอนอีกครั้ง
  8. ฉันกู้คืนการเปลี่ยนแปลงทั้งหมดของฉัน

หากคุณทำงานกับ Pycharm ประวัติศาสตร์ท้องถิ่นนั้นเป็นประโยชน์อย่างมาก



1
./manage makemigrations
./manage migrate

การย้ายข้อมูลจะติดตามการเปลี่ยนแปลงของฐานข้อมูลดังนั้นหากคุณเปลี่ยนจากไม่มีการจัดการเป็นการจัดการคุณจะต้องตรวจสอบให้แน่ใจว่าตารางฐานข้อมูลของคุณเป็นรุ่นล่าสุดที่เกี่ยวข้องกับตัวแบบที่คุณกำลังทำอยู่

หากคุณยังอยู่ในโหมด dev ฉันตัดสินใจที่จะลบไฟล์การโยกย้ายใน IDE ของฉันเช่นเดียวกับในตาราง django_migrations ที่เกี่ยวข้องกับ Model ของฉันและรันคำสั่งข้างต้นอีกครั้ง

โปรดจำไว้ว่า: หากคุณมีการย้ายข้อมูลที่ลงท้ายด้วย _001 ใน IDE และ _003 ในฐานข้อมูลของคุณ Django จะเห็นว่าคุณมีการย้ายข้อมูลที่ลงท้ายด้วย _004 เพื่อให้อัปเดตหรือไม่

การโยกย้าย 2 (รหัส & db) ถูกเชื่อมโยงและทำงานควบคู่

การเข้ารหัสที่มีความสุข


1
  1. ลบการเปลี่ยนแปลงที่คุณต้องการซิงค์
  2. เรียกใช้ python manage.py makemigrations app_label สำหรับการย้ายครั้งแรก
  3. รัน python Manage.py โยกย้ายเพื่อสร้างตารางก่อนที่จะทำการเปลี่ยนแปลง
  4. วางการเปลี่ยนแปลงที่คุณลบในขั้นตอนแรก
  5. รัน 2 และ 3 ขั้นตอน

0

เพิ่มคำตอบนี้เพราะไม่มีสิ่งอื่นใดที่ใช้ได้สำหรับฉัน

ในกรณีของฉันมีอะไรแปลก ๆ เกิดขึ้น ( รุ่น Django 1.7 ) ในmodels.pyของฉันฉันมีบรรทัด"พิเศษ"ที่ท้ายไฟล์ของฉัน (เป็นบรรทัดว่าง) และเมื่อฉันรันpython manage.py makemigrationsคำสั่งผลลัพธ์คือ: "ตรวจไม่พบการเปลี่ยนแปลง"

ในการแก้ไขปัญหานี้ฉันได้ลบ"บรรทัดว่าง"ที่อยู่ท้ายไฟล์models.pyของฉันและฉันเรียกใช้คำสั่งอีกครั้งทุกอย่างได้รับการแก้ไขและตรวจพบการเปลี่ยนแปลงทั้งหมดที่ทำกับmodels.py !


ดีใน django 2.0 + ต้องใช้บรรทัดว่างฉันเชื่อว่าฉันต้องทำตรงข้ามกับสิ่งที่คุณทำกับเพื่อน
สุมิตร Kumar Saha

@SumitKumarSaha ฮ่าฮ่าฉันใช้รุ่น Django 1.7 อยู่ในขณะนี้และบรรทัดว่างนั้นเป็นสาเหตุของการลองทุกอย่างเพื่อแก้ข้อผิดพลาดในการย้าย 2 ชั่วโมง ขอบคุณสำหรับการแบ่งปัน Sumit ขอให้มีความสุขมาก ๆ ในวันนี้
ฮัสกี้

0

คุณอาจต้องปลอมแปลงการโยกย้ายครั้งแรกโดยใช้คำสั่งด้านล่าง

python manage.py migrate --fake-initial

0

ก่อนอื่นโซลูชันนี้ใช้ได้กับผู้ที่ประสบปัญหาเดียวกันระหว่างการปรับใช้บนเซิร์ฟเวอร์ heroku ฉันกำลังเผชิญกับปัญหาเดียวกัน

ในการปรับใช้มีขั้นตอนบังคับซึ่งต้องเพิ่ม django_heroku.settings (locals ()) ในไฟล์ settings.py

การเปลี่ยนแปลง: เมื่อฉันเปลี่ยนบรรทัดด้านบนเป็น django_heroku.settings (locals (), ฐานข้อมูล = False) มันทำงานได้อย่างไม่มีที่ติ


0

ในกรณีของฉันฉันต้องเพิ่มแบบจำลองของฉันลงในไฟล์_ init _.py ของโฟลเดอร์รุ่นที่มีการกำหนดแบบจำลองของฉัน:

from myapp.models.mymodel import MyModel

-1

การเพิ่ม 2c ของฉันเนื่องจากไม่มีวิธีแก้ไขปัญหาเหล่านี้ที่เหมาะกับฉัน แต่นี่ทำ ...

ฉันเพิ่งเรียกใช้manage.py squashmigrationsและลบการย้ายข้อมูลเก่า (ทั้งไฟล์และบรรทัดในตารางฐานข้อมูล django.migrations)

นี่เหลือบรรทัดแบบนี้ในไฟล์การโยกย้ายครั้งล่าสุด:

replaces = [(b'my_app', '0006_auto_20170713_1735'), (b'my_app', '0007_auto_20170713_2003'), (b'my_app', '0008_auto_20170713_2004')]

เห็นได้ชัดว่า Django สับสนและก่อให้เกิดพฤติกรรมแปลก ๆ : การวิ่งmanage.py makemigrations my_appจะสร้างการโยกย้ายครั้งแรกขึ้นใหม่ราวกับว่าไม่มีอยู่จริง การลบreplaces...บรรทัดเป็นการแก้ไขปัญหา!


-1

หลาม Manage.py makemigrations บัญชีการโยกย้ายสำหรับ 'บัญชี': บัญชี \ migrations \ 0001_initial.py - สร้างแบบจำลองลูกค้า - สร้างแบบจำลองแท็ก - สร้างแบบจำลองผลิตภัณฑ์ - สร้างแบบจำลองการสั่งซื้อ

หมายเหตุ: ที่นี่ "บัญชี" เป็นชื่อแอปของฉัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.