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


141

ฉันพยายามสร้างการย้ายข้อมูลภายในแอปที่มีอยู่โดยใช้คำสั่ง makemigrations แต่ผลลัพธ์ออกมาว่า "ไม่พบการเปลี่ยนแปลง"

โดยปกติฉันจะสร้างแอพใหม่โดยใช้startappคำสั่ง แต่ไม่ได้ใช้กับแอพนี้ตอนที่สร้าง

หลังจากแก้ไขข้อบกพร่องฉันพบว่าไม่ได้สร้างการย้ายข้อมูลเนื่องจากmigrationsแพ็กเกจ / โฟลเดอร์หายไปจากแอป

จะดีกว่าไหมถ้าสร้างโฟลเดอร์ขึ้นมาถ้าไม่มีหรือฉันทำอะไรหายไป


13
คุณได้เพิ่มแอปของคุณลงใน INSTALLED_APPS หรือไม่
wolendranh

6
ใช่มันอยู่ในแอพที่ติดตั้งเป็นครั้งแรกดีกว่าที่จะใช้makemigrations <myapp>ตามที่ Alasdair ชี้ให้เห็นด้วย
Dilraj

1
ลบ 'abstract = True' :)
GrvTyagi

'makemigrations' ไม่ทำงาน 'makemigrations <myapp>' ทำงาน
Aseem

ในกรณีของฉันตรวจไม่พบการเปลี่ยนแปลงเนื่องจากคลาสภายใน models.py ไม่ได้สืบทอดมาจากโมเดล หลังจากสร้างคลาสภายใน models.py สืบทอดจากโมเดลโมเดลเช่น MyDataClass (models.Model) ปัญหาได้รับการแก้ไข เป็นเรื่องเล็กน้อย แต่หวังว่านี่อาจช่วยใครบางคนได้
LMB

คำตอบ:


268

ในการสร้างการย้ายข้อมูลเริ่มต้นสำหรับแอปให้เรียกใช้makemigrationsและระบุชื่อแอป โฟลเดอร์การย้ายข้อมูลจะถูกสร้างขึ้น

./manage.py makemigrations <myapp>

ต้องรวมแอปของคุณไว้ในINSTALLED_APPSอันดับแรก (ภายใน settings.py)


15
มีความคิดว่าทำไมพวกเขา <บางครั้ง> บังคับให้เราระบุแอป?
maazza

40
@maazza คุณต้องระบุชื่อแอปหากแอปไม่มีmigrationsโฟลเดอร์ สิ่งนี้อาจเกิดขึ้นได้หากคุณสร้างแอปด้วยตนเองหรืออัปเกรดจาก Django เวอร์ชันเก่าที่ไม่มีการย้ายข้อมูล
Alasdair

13
@maazza จริงๆแล้วคุณต้องมีแพ็คเกจ python (พร้อม__init__.py) ชื่อ 'migrations' ในแอพ
Jibin

3
ดูเหมือนสิ่งที่ Django ควรจัดการโดยอัตโนมัติ
คู่ _

1
@duality_ นี่คือการออกแบบ - Django ไม่คิดว่าคุณต้องการย้ายข้อมูลสำหรับแอปของคุณ migrateถ้ามันสร้างการโยกย้ายปพลิเคชันทั้งหมดก็อาจนำไปสู่ข้อผิดพลาดเมื่อคุณเรียกใช้
Alasdair

50

ปัญหาของฉัน (และวิธีแก้ปัญหา) ยังแตกต่างจากที่อธิบายไว้ข้างต้น

ฉันไม่ได้ใช้models.pyไฟล์ แต่สร้างmodelsไดเร็กทอรีและสร้างmy_model.pyไฟล์ที่นั่นซึ่งฉันใส่โมเดลของฉัน Django ไม่พบโมเดลของฉันดังนั้นจึงเขียนว่าไม่มีการย้ายข้อมูลให้ใช้

วิธีแก้ปัญหาของฉันคือ: ในไฟล์ my_app/models/__init__.pyไฟล์ฉันเพิ่มบรรทัดนี้: from .my_model import MyModel


สิ่งนี้น่าจะเป็นทางออกสำหรับฉันเช่นกัน แต่ฉันไม่เข้าใจว่าทำไมถึงเป็นเช่นนี้ ใครมีข้อมูลเชิงลึกเกี่ยวกับสิ่งที่อาจทำให้เกิดสิ่งนี้?
Paul in 't Hout

Django มีเส้นทางเริ่มต้นในการค้นหาโมเดลของคุณ หากโครงสร้างโครงการแตกต่างกันและแบบจำลองไม่ได้อยู่ในสถานที่ปกติจะต้องนำเข้าที่นั่น
Karina Klinkevičiūtė

@ KarinaKlinkevičiūtėจะทำอย่างไรถ้าต้องถอดแบบจำลองดังกล่าว
Daniil Mashkin

@DaniilMashkin ฉันคิดว่าคุณจะต้องลบการนำเข้าด้วย นี่เป็นวิธีหนึ่งในการจัดโครงสร้างโครงการของคุณ (ไม่ใช่วิธีเดียว) และคุณต้องจัดการกับงานเพิ่มเติมที่มาพร้อมกับมันหากคุณเลือก :)
Karina Klinkevičiūtė

1
ฉันใช้สถาปัตยกรรม "คลาสสิก" สำหรับโมเดลจากนั้นย้ายไปที่สถาปัตยกรรม "โฟลเดอร์โมเดล" และยังตรวจพบการย้ายข้อมูลในโมเดลที่มีอยู่ อย่างไรก็ตามตอนนี้เมื่อสร้างโมเดลใหม่ฉันมีปัญหานี้ โซลูชันของคุณใช้งานได้ดี แต่ทำให้โค้ดเบสของฉันไม่สอดคล้องกันเนื่องจากบางครั้งมีการนำเข้าบางครั้งก็ไม่ได้ บางทีอาจมีทางออกที่ดีกว่านี้ ฉันเดาว่า Django ควรเสนอการตั้งค่าพร้อมรายการโฟลเดอร์ที่ต้องค้นหาเมื่อพยายามค้นหาโมเดลใหม่ ๆ
David D.

44

มีสาเหตุหลายประการที่ทำให้ django ตรวจไม่พบสิ่งที่จะโยกย้ายระหว่างmakemigrationsคำสั่ง

  1. โฟลเดอร์การย้ายข้อมูลคุณต้องมีแพ็คเกจการย้ายข้อมูลในแอปของคุณ
  2. INSTALLED_APPSคุณต้องระบุแอปของคุณใน. INSTALLED_APPSdict
  3. Verbosity เริ่มต้นด้วยการทำงานmakemigrations -v 3เพื่อความฟุ่มเฟื่อย สิ่งนี้อาจทำให้เกิดปัญหาขึ้น
  4. เส้นทางแบบเต็มในINSTALLED_APPSก็จะแนะนำให้ระบุโมดูลเต็มเส้นทางแอปกำหนดค่า 'apply.apps.MyAppConfig'
  5. - การตั้งค่าคุณอาจต้องการให้แน่ใจว่าไฟล์การตั้งค่าถูกต้อง:manage.py makemigrations --settings mysite.settings
  6. ระบุชื่อแอปใส่ชื่อแอปอย่างชัดเจนmanage.py makemigrations myappซึ่งจะ จำกัด การย้ายข้อมูลสำหรับแอปเพียงอย่างเดียวและช่วยให้คุณแยกปัญหาได้
  7. การตรวจสอบเมตาโมเดลคุณมีสิทธิ์app_labelในเมตาโมเดลของคุณ

  8. ดีบัก django debug django core script คำสั่ง makemigrations ค่อนข้างตรงไปตรงมา นี่คือวิธีการทำใน pycharmpycharm เปลี่ยนนิยามสคริปต์ของคุณตาม (เช่น: makemigrations --traceback myapp)

หลายฐานข้อมูล:

  • Db Routerเมื่อทำงานกับเราเตอร์ django db คลาสเราเตอร์ (คลาสเราเตอร์ที่กำหนดเองของคุณ) จำเป็นต้องใช้allow_syncdbวิธีนี้

makemigrations จะสร้างการย้ายข้อมูลสำหรับการเปลี่ยนแปลงโมเดลเสมอ แต่ถ้า allow_migrate () ส่งคืน False


1
ครอบคลุมหลายสถานการณ์เกี่ยวกับปัญหาควรเป็นคำตอบที่ยอมรับได้
Krishh

ความเป็นไปได้อื่น: กำลังนำเข้าชื่อที่ไม่ถูกต้องเช่นการนำเข้าเขตข้อมูลจากแบบฟอร์มแทนที่จะเป็นเขตข้อมูลหรือนำเข้าแบบจำลองจากแบบฟอร์มแทนแบบจำลอง ตัวอย่าง: แต่มันควรจะได้รับfrom recurrence.forms import RecurrenceField from recurrence.fields import RecurrenceField
hlongmore

อีกหนึ่งเหตุผล ตรวจสอบให้แน่ใจว่าโมเดลถูกใช้ภายในเส้นทางสำหรับเว็บไซต์ (ผ่านผู้ดูแลระบบหรืออื่น ๆ ) " makemigrationsสคริปต์ค้นหาโมเดลที่เชื่อมต่อจากurls.py" พบที่นี่stackoverflow.com/questions/43093651/…
Kyle

cmd ตัวอย่าง:python manage.py makemigrations -v 3 <app_name>
Charlie 木匠

เมื่อฉันเพิ่มตารางแล้วเพิ่ม Foreign Key อ้างอิงตารางใหม่นี้ในเวลาเดียวกัน จะต้องแบ่งออกเป็น 2 ขั้นตอน: ขั้นตอนก่อน: เพิ่ม INSTALLED_APPS ในการตั้งค่า 1) สร้างตารางใหม่: python Manage.py makemigrations <app_name>; 2) เพิ่ม Foreign Key: python Manage.py makemigrations
Charlie

26

ฉันได้อ่านคำตอบมากมายสำหรับคำถามนี้ซึ่งมักระบุว่าเพียงแค่เรียกใช้makemigrationsด้วยวิธีอื่น แต่สำหรับฉันแล้วปัญหาอยู่ที่Metaคลาสย่อยของโมเดล

ฉันมีการตั้งค่าแอปที่บอกว่าlabel = <app name>(ในapps.pyไฟล์ข้างmodels.py, views.pyฯลฯ ) หากมีโอกาสใดก็ตามที่คลาสเมตาของคุณไม่มีป้ายกำกับเดียวกับป้ายกำกับแอป (เช่นคุณแยกแอปที่ใหญ่เกินไปแอปหนึ่งออกเป็นหลายแอป) จะไม่มีการตรวจพบการเปลี่ยนแปลงใด ๆ (และไม่มีข้อความแสดงข้อผิดพลาดที่เป็นประโยชน์ใด ๆ ) ดังนั้นในคลาสโมเดลของฉันตอนนี้ฉันมี:

class ModelClassName(models.Model):

    class Meta:
        app_label = '<app name>' # <-- this label was wrong before.

    field_name = models.FloatField()
    ...

รัน Django 1.10 ที่นี่


13

เป็นความคิดเห็น แต่น่าจะเป็นคำตอบ

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

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'blog',
]

จากนั้นเรียกใช้:

./manage.py makemigrations blog

แต่มันสร้างชื่อตารางเป็น 'appname_modelname' เมื่อเราเรียกใช้คำสั่ง 'Manage.py migrate'
Daniyal Javaid

ดูตัวเลือกเมตาแบบจำลองเพื่อเปลี่ยนชื่อตาราง
stephen

11

ฉันมีปัญหาอื่นที่ไม่ได้อธิบายไว้ที่นี่ซึ่งทำให้ฉันรู้สึกแย่

class MyModel(models.Model):
    name = models.CharField(max_length=64, null=True)  # works
    language_code = models.CharField(max_length=2, default='en')  # works
    is_dumb = models.BooleanField(default=False),  # doesn't work

ฉันมี ',' ต่อท้ายในหนึ่งบรรทัดอาจมาจากการคัดลอกและวาง บรรทัดที่มี is_dumb ไม่ได้สร้างการย้ายโมเดลด้วย "./manage.py makemigrations" แต่ก็ไม่เกิดข้อผิดพลาด หลังจากลบ ',' มันทำงานตามที่คาดไว้

ดังนั้นโปรดระมัดระวังเมื่อคุณคัดลอกและวาง :-)


เครื่องหมายจุลภาคต่อท้ายอาจทำให้เกิดข้อบกพร่องที่อื่นได้เช่นกัน ลูกน้ำทำให้คำสั่งเป็นทูเพิลจึงis_dumbเท่ากับ(models.BooleanField(default=False), )ซึ่งmakemigrationsไม่รู้ว่าจะแปลงเป็นคอลัมน์ฐานข้อมูลอย่างไร
hlongmore

8

มีบางครั้งที่./manage.py makemigrationsเหนือกว่า./manage.py makemigrations <myapp>เนื่องจากสามารถจัดการความขัดแย้งบางอย่างระหว่างแอปได้

เหตุการณ์เหล่านั้นเกิดขึ้นอย่างเงียบ ๆ และต้องใช้เวลาหลายชั่วโมงในswearingการทำความเข้าใจความหมายที่แท้จริงของNo changes detectedข้อความที่น่ากลัว

ดังนั้นจึงเป็นทางเลือกที่ดีกว่าในการใช้คำสั่งต่อไปนี้:

./manage.py makemigrations <myapp1> <myapp2> ... <myappN>


7

ฉันได้คัดลอกตารางจากภายนอก django และคลาส Meta เริ่มต้นเป็น "managed = false" ตัวอย่างเช่น:

class Rssemailsubscription(models.Model):
    id = models.CharField(primary_key=True, max_length=36)
    ...
    area = models.FloatField('Area (Sq. KM)', null=True)

    class Meta:
        managed = False
        db_table = 'RSSEmailSubscription'

การเปลี่ยนการเปลี่ยนแปลงเป็น True ทำให้การกำหนดค่าเริ่มรับการเปลี่ยนแปลง


4
  1. ตรวจสอบให้แน่ใจว่ามีการกล่าวถึงแอปของคุณใน installed_apps ใน settings.py
  2. ตรวจสอบให้แน่ใจว่าคลาสโมเดลของคุณขยายโมเดล

2

ฉันแก้ไขปัญหานั้นโดยทำสิ่งนี้:

  1. ลบไฟล์ "db.sqlite3" ปัญหาคือฐานข้อมูลปัจจุบันของคุณจะถูกลบดังนั้นคุณจะต้องสร้างใหม่อีกครั้ง
  2. ภายในโฟลเดอร์การย้ายข้อมูลของแอปที่คุณแก้ไขให้ลบไฟล์ที่อัปเดตล่าสุด โปรดจำไว้ว่าไฟล์แรกที่สร้างคือ: "0001_initial.py" ตัวอย่างเช่นฉันสร้างคลาสใหม่และลงทะเบียนโดยขั้นตอน "makemigrations" และ "migrate" ตอนนี้ไฟล์ใหม่ชื่อ "0002_auto_etc.py" ถูกสร้างขึ้น ลบมัน
  3. ไปที่โฟลเดอร์ " pycache " (ภายในโฟลเดอร์ migrations) และลบไฟล์ "0002_auto_etc.pyc"
  4. สุดท้ายไปที่คอนโซลและใช้ "python Manage.py makemigrations" และ "python Manage.py migrate"

2

ฉันลืมใส่อาร์กิวเมนต์ที่ถูกต้อง:

class LineInOffice(models.Model):   # here
    addressOfOffice = models.CharField("Корхоная жош",max_length= 200)   #and here
    ...

ใน models.py แล้วมันก็เริ่มลดลงที่น่ารำคาญ

ตรวจไม่พบการเปลี่ยนแปลงในแอป 'myApp'


2

อีกสาเหตุหนึ่งที่เป็นไปได้คือถ้าคุณมีโมเดลบางรุ่นที่กำหนดไว้ในไฟล์อื่น (ไม่ใช่ในแพ็คเกจ) และไม่ได้อ้างอิงถึงที่อื่น

สำหรับฉันเพียงแค่เพิ่มfrom .graph_model import *ไปยังadmin.py( graph_model.pyไฟล์ใหม่อยู่ที่ไหน) ก็แก้ไขปัญหาได้


2

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

rm -r */migrations/*
rm db.sqlite3
python3 manage.py makemigrations
No changes detected

Whaat ??

ฉันได้ลบ__init__.pyไฟล์ทั้งหมดโดยไม่ได้ตั้งใจ:( - ทุกอย่างทำงานได้อีกครั้งหลังจากที่ฉันเข้าไปและ:

touch ads1/migrations/__init__.py

สำหรับแต่ละแอปพลิเคชันของฉันแล้วการmakemigrationsทำงานอีกครั้ง

ปรากฎว่าฉันได้สร้างแอปพลิเคชันใหม่ด้วยตนเองโดยการคัดลอกแอปพลิเคชันอื่นและลืมใส่ไว้__init__.pyในmigrationsโฟลเดอร์และนั่นทำให้ฉันรู้สึกว่าทุกอย่างไม่เป็นระเบียบ - ทำให้ฉันแย่ลงด้วยrm -rตามที่อธิบายไว้ข้างต้น

หวังว่านี่จะช่วยไม่ให้ใครบางคนสาบานกับข้อผิดพลาด "ไม่พบการเปลี่ยนแปลง" เป็นเวลาสองสามชั่วโมง


1

วิธีแก้ปัญหาคือคุณต้องรวมแอปของคุณไว้ใน INSTALLED_APPS

ฉันพลาดและพบปัญหาเดียวกันนี้

หลังจากระบุการย้ายชื่อแอปของฉันสำเร็จ

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'boards',
]

โปรดทราบว่าฉันพูดถึงบอร์ดสุดท้ายซึ่งเป็นชื่อแอปของฉัน


1

INSTALLED_APPS = [

'blog.apps.BlogConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',

]

ตรวจสอบให้แน่ใจว่า 'blog.apps.BlogConfig' (ซึ่งรวมอยู่ใน settings.py ของคุณเพื่อทำการย้ายแอปของคุณ)

จากนั้นเรียกใช้ python3 Manage.py makemigrations blog หรือชื่อแอปของคุณ


1

ปัญหาโง่ ๆ ที่คุณสามารถมีได้เช่นกันคือการกำหนดสองข้อclass Metaในแบบจำลองของคุณ ในกรณีที่มีการเปลี่ยนแปลงใด ๆ makemigrationsที่จะเป็นคนแรกที่จะไม่ถูกนำมาใช้เมื่อทำงาน

class Product(models.Model):
    somefield = models.CharField(max_length=255)
    someotherfield = models.CharField(max_length=255)

    class Meta:
        indexes = [models.Index(fields=["somefield"], name="somefield_idx")]

    def somefunc(self):
        pass

    # Many lines...

    class Meta:
        indexes = [models.Index(fields=["someotherfield"], name="someotherfield_idx")]

1

ฉันรู้ว่านี่เป็นคำถามเก่า แต่ฉันต่อสู้กับปัญหาเดียวกันนี้ทั้งวันและวิธีแก้ปัญหาของฉันก็ง่ายมาก

ฉันมีโครงสร้างไดเรกทอรีของฉันตามแนวของ ...

apps/
   app/
      __init__.py
      app_sub1/
           __init__.py
           models.py
      app_sub2/
           __init__.py
           models.py
      app_sub3/
           __init__.py
           models.py
   app2/
      __init__.py
      app2_sub1/
           __init__.py
           models.py
      app2_sub2/
           __init__.py
           models.py
      app2_sub3/
           __init__.py
           models.py
    main_app/
      __init__.py
      models.py

และเนื่องจากรุ่นอื่น ๆ ทั้งหมดจนถึงรุ่นที่ฉันมีปัญหากำลังถูกนำเข้าที่อื่นซึ่งลงเอยด้วยการนำเข้าจากmain_appที่ได้รับการจดทะเบียนในINSTALLED_APPSฉันก็โชคดีที่ทุกอย่างใช้งานได้

แต่เนื่องจากผมเพิ่มเพียงแต่ละappไปINSTALLED_APPSและไม่app_sub*เมื่อในที่สุดผมก็เพิ่มไฟล์รูปแบบใหม่ที่ไม่ได้นำเข้าอื่นใด Django ไม่สนใจมัน

การแก้ไขของฉันคือการเพิ่มmodels.pyไฟล์ลงในไดเร็กทอรีฐานของแต่ละไฟล์appเช่นนี้ ...

apps/
   app/
      __init__.py
      models.py <<<<<<<<<<--------------------------
      app_sub1/
           __init__.py
           models.py
      app_sub2/
           __init__.py
           models.py
      app_sub3/
           __init__.py
           models.py
   app2/
      __init__.py
      models.py <<<<<<<<<<--------------------------
      app2_sub1/
           __init__.py
           models.py
      app2_sub2/
           __init__.py
           models.py
      app2_sub3/
           __init__.py
           models.py
    main_app/
      __init__.py
      models.py

จากนั้นเพิ่มfrom apps.app.app_sub1 import *และอื่น ๆ ในแต่ละไฟล์appระดับmodels.py

Bleh ... นี่ใช้เวลานานมากในการคิดและฉันไม่พบวิธีแก้ปัญหาใด ๆ เลย ... ฉันยังไปที่หน้า 2 ของผลการค้นหาของ Google

หวังว่านี่จะช่วยใครสักคน!


1

อีกหนึ่งเคสขอบและโซลูชัน:

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


1

ฉันมีปัญหาคล้ายกันกับ django 3.0 ตามส่วนการย้ายข้อมูลในเอกสารอย่างเป็นทางการการเรียกใช้สิ่งนี้เพียงพอที่จะอัปเดตโครงสร้างตารางของฉัน:

python manage.py makemigrations
python manage.py migrate

แต่ผลลัพธ์จะเหมือนกันเสมอ: 'ไม่พบการเปลี่ยนแปลง' เกี่ยวกับโมเดลของฉันหลังจากที่ฉันเรียกใช้สคริปต์ 'makemigrations' ฉันมีข้อผิดพลาดทางไวยากรณ์ใน models.py ที่โมเดลที่ฉันต้องการอัปเดตบน db:

field_model : models.CharField(max_length=255, ...)

แทน:

field_model = models.CharField(max_length=255, ...)

การแก้ไขข้อผิดพลาดโง่ ๆ นี้ด้วยคำสั่งเหล่านั้นการโยกย้ายก็ทำได้โดยไม่มีปัญหา บางทีนี่อาจช่วยใครบางคนได้



0

ในกรณีของฉันฉันลืมใส่อาร์กิวเมนต์ของคลาส

ไม่ถูกต้อง:

class AccountInformation():

แก้ไข

class AccountInformation(models.Model):

0

ในกรณีของฉันฉันได้เพิ่มฟิลด์ให้กับโมเดลก่อนแล้ว Django บอกว่าไม่มีการเปลี่ยนแปลง

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

มี "จุดบกพร่อง" ในระบบการโยกย้าย django บางครั้งก็ไม่เห็นฟิลด์ใหม่ อาจเกี่ยวข้องกับฟิลด์วันที่


0

สาเหตุที่เป็นไปได้คือการลบไฟล์ db และโฟลเดอร์การย้ายข้อมูลที่มีอยู่ซึ่งคุณสามารถใช้ python manage.py makemigrations <app_name>ซึ่งควรใช้งานได้ ครั้งหนึ่งฉันประสบปัญหาคล้าย ๆ กัน


0

หากคุณมีmanaged = TrueMeta ในรุ่น yout คุณจะต้องลบออกและทำการย้ายข้อมูล จากนั้นเรียกใช้การย้ายข้อมูลอีกครั้งจะตรวจพบการอัปเดตใหม่


0

เมื่อเพิ่มโมเดลใหม่ลงในแอปพลิเคชัน django api และเรียกใช้ไฟล์ python manage.py makemigrationsเครื่องมือตรวจไม่พบรุ่นใหม่ใด ๆ

สิ่งที่แปลกคือรุ่นเก่าได้รับเลือกmakemigrationsแต่นี่เป็นเพราะพวกเขาถูกอ้างอิงในurlpatternsโซ่และเครื่องมือก็ตรวจพบพวกมัน ดังนั้นจับตาดูพฤติกรรมนั้นไว้

ปัญหาเกิดจากโครงสร้างไดเร็กทอรีที่สอดคล้องกับแพ็กเกจโมเดลมีแพ็กเกจย่อยและ__init__.pyไฟล์ทั้งหมดว่างเปล่า พวกเขาต้องอิมพอร์ตคลาสที่จำเป็นทั้งหมดอย่างชัดเจนในแต่ละโฟลเดอร์ย่อยและในโมเดล __init__.pyเพื่อให้ Django หยิบขึ้นมาด้วยmakemigrationsเครื่องมือ

models
  ├── __init__.py          <--- empty
  ├── patient
     ├── __init__.py      <--- empty
     ├── breed.py
     └── ...
  ├── timeline
     ├── __init__.py      <-- empty
     ├── event.py
     └── ...

0

ลองลงทะเบียนโมเดลของคุณใน admin.py นี่คือตัวอย่าง: - admin.site.register (YourModelHere)

คุณสามารถดำเนินการดังต่อไปนี้: - 1. admin.site.register (YourModelHere) # ใน admin.py 2. โหลดหน้านี้ซ้ำแล้วลองอีกครั้ง 3. กด CTRL-S แล้วบันทึก 4. อาจมีข้อผิดพลาดให้ตรวจสอบรุ่นเป็นพิเศษ .py และ admin.py 5. หรือในตอนท้ายของทั้งหมดเพียงแค่รีสตาร์ทเซิร์ฟเวอร์


0

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

หากคุณมีฟังก์ชันภายในโมเดลของคุณโดยใช้ชื่อเดียวกันค่านี้จะลบค่าออก ค่อนข้างชัดเจนในการมองย้อนกลับไป แต่อย่างไรก็ตาม

ดังนั้นหากคุณมีสิ่งนี้:

class Foobar(models.Model):
    [...]
    something = models.BooleanField(default=False)

    [...]
    def something(self):
        return [some logic]

ในกรณีที่ฟังก์ชันจะแทนที่การตั้งค่าดังกล่าวข้างต้นทำให้ "มองไม่เห็น" makemigrationsเพื่อ


0

สิ่งที่ดีที่สุดที่คุณสามารถทำได้คือลบฐานข้อมูลที่มีอยู่ ในกรณีของฉันฉันใช้ฐานข้อมูล phpMyAdmin SQL ดังนั้นฉันจึงลบฐานข้อมูลที่สร้างขึ้นด้วยตนเอง

หลังจากลบ: ฉันสร้างฐานข้อมูลใน PhpMyAdmin และไม่ได้เพิ่มตารางใด ๆ

เรียกใช้คำสั่งต่อไปนี้อีกครั้ง:

python manage.py makemigrations

python manage.py migrate

หลังจากคำสั่งเหล่านี้ : คุณจะเห็นว่า django ได้สร้างตารางที่จำเป็นอื่น ๆ โดยอัตโนมัติในฐานข้อมูล (มีประมาณ 10 ตาราง)

python manage.py makemigrations <app_name>

python manage.py migrate

และสุดท้าย:หลังจากด้านบนคำสั่งโมเดล (ตาราง) ทั้งหมดที่คุณสร้างจะถูกนำเข้าสู่ฐานข้อมูลโดยตรง

หวังว่านี่จะช่วยได้



0

ฉันมีปัญหาอื่นขณะสร้างแอปใหม่ชื่อdeals. ฉันต้องการแยกโมเดลภายในแอพนั้นดังนั้นฉันจึงมีไฟล์โมเดล 2 ไฟล์ชื่อdeals.pyและdealers.py. เมื่อวิ่งpython manage.py makemigrationsฉันได้รับ: No changes detected.

ฉันไปข้างหน้าและข้างในสิ่ง__init__.pyที่อยู่ในไดเร็กทอรีเดียวกับที่ไฟล์โมเดลของฉันอาศัยอยู่ (ดีลและตัวแทนจำหน่าย) ที่ฉันทำ

from .deals import *
from .dealers import *

จากนั้นmakemigrationsคำสั่งก็ทำงาน

ปรากฎว่าหากคุณไม่ได้นำเข้าโมเดลจากที่ใดก็ตามหรือชื่อไฟล์โมเดลของคุณไม่ใช่models.pyโมเดลจะไม่ถูกตรวจพบ

ปัญหาอื่นที่เกิดขึ้นกับฉันคือวิธีที่ฉันเขียนแอป settings.py :

ฉันมี:

apps.deals

ควรรวมโฟลเดอร์ root project ไว้ด้วย:

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