Django: प्रोग्रामिंग त्रुटि: कॉलम "आईडी" मौजूद नहीं है - पायथन, django, postgresql

मैं Postgresql डेटाबेस (SQLite होने से पहले) का उपयोग करने की कोशिश करता हूं, लेकिन मेरे पास एक संदेश है जब मैं निष्पादित करता हूं python manage.py migrate :

Operations to perform:
Apply all migrations: sessions, admin, sites, auth, contenttypes, main_app
Running migrations:
Rendering model states... DONE
Applying main_app.0004_auto_20161002_0034...Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 353, in execute_from_command_line
utility.execute()
File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 345, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 348, in run_from_argv
self.execute(*args, **cmd_options)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 399, in execute
output = self.handle(*args, **options)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/migrate.py", line 200, in handle
executor.migrate(targets, plan, fake=fake, fake_initial=fake_initial)
File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/executor.py", line 92, in migrate
self._migrate_all_forwards(plan, full_plan, fake=fake, fake_initial=fake_initial)
File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/executor.py", line 121, in _migrate_all_forwards
state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/executor.py", line 198, in apply_migration
state = migration.apply(state, schema_editor)
File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/migration.py", line 123, in apply
operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/operations/fields.py", line 201, in database_forwards
schema_editor.alter_field(from_model, from_field, to_field)
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/base/schema.py", line 482, in alter_field
old_db_params, new_db_params, strict)
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/postgresql/schema.py", line 110, in _alter_field
new_db_params, strict,
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/base/schema.py", line 634, in _alter_field
params,
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/base/schema.py", line 110, in execute
cursor.execute(sql, params)
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/utils.py", line 79, in execute
return super(CursorDebugWrapper, self).execute(sql, params)
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/utils.py", line 64, in execute
return self.cursor.execute(sql, params)
File "/usr/local/lib/python2.7/dist-packages/django/db/utils.py", line 95, in __exit__
six.reraise(dj_exc_type, dj_exc_value, traceback)
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/utils.py", line 64, in execute
return self.cursor.execute(sql, params)
django.db.utils.ProgrammingError: column "id" does not exist
LINE 1: ..._app_projet" ALTER COLUMN "id" TYPE integer USING "id"::inte...

तो मुझे लगता है कि यह त्रुटि मेरे मॉडल "प्रोजेट" के बारे में है, लेकिन इस मॉडल में आईडी फ़ील्ड है! में देखता हूँ 0001_initial.py :

...
migrations.CreateModel(
name="Projet",
fields=[
("id", models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
("name", models.CharField(db_index=True, max_length=30)),
("presentation", models.TextField(max_length=2500, null=True)),
...

मेरा माइग्रेशन main_app.0004_auto_20161002_0034:

class Migration(migrations.Migration):

dependencies = [
("main_app", "0003_auto_20161002_0033"),
]

operations = [
migrations.AlterField(
model_name="projet",
name="id",
field=models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID"),
),
]

प्रोजेट मॉडल ऐसा है:

class Group(models.Model) :
name = models.CharField(max_length=30, db_index=True)

class Meta :
abstract = True
unique_together = (("id", "name"),)


class Projet(Group) :
presentation = models.TextField(max_length=2500, null=True)

वास्तव में मैं यह नहीं समझता कि मुझे यह त्रुटि क्यों है ... मेरी सेटिंग्स कॉन्फ़िगरेशन डेटाबेस अच्छा है, अन्य सभी मॉडल काम करते हैं, ...

अगर मैं कुछ भूल गया, तो कृपया मुझे बताने में संकोच न करें! मुझे आपकी मदद की ज़रूरत है!

उत्तर:

जवाब के लिए 3 № 1

आपके मॉडल की परिभाषा किसी भी फ़ील्ड को प्राथमिक कुंजी के रूप में नहीं पहचानती है, इसलिए Django एक प्राथमिक कुंजी कॉलम का नाम देता है id। हालाँकि यह कॉलम वास्तव में तालिका में मौजूद नहीं है।

फ़ील्ड में से एक को प्राथमिक कुंजी के रूप में नामित करने के लिए अपनी मॉडल परिभाषा बदलें, और Django ने "ए की तलाश करने की कोशिश नहीं की।" id स्तंभ।


जवाब के लिए 2 № 2
class Group(models.Model) :
name = models.CharField(max_length=30, unique=True)

class Meta:
abstract = True


class Projet(Group) :
presentation = models.CharField(max_length=2500, blank=True)

अपना माइग्रेशन निकालें और एक नया बनाएं।

बस मेरे दो सेंट जोड़ने।

अशक्त क्षेत्र:

स्ट्रिंग-आधारित फ़ील्ड्स जैसे कि नल का उपयोग करने से बचेंCharField और TextField क्योंकि खाली स्ट्रिंग मान हमेशा खाली के रूप में संग्रहीत किए जाएंगे तार, NULL के रूप में नहीं। यदि किसी स्ट्रिंग-आधारित फ़ील्ड में null = True है, तो इसका मतलब है कि "कोई डेटा नहीं" के लिए दो संभावित मान हैं: रिक्त, और खाली स्ट्रिंग। ज्यादातर मामलों में, इसके लिए दो संभावित मान होना अतिरेक है "कोई डेटा नहीं;" Django सम्मेलन खाली स्ट्रिंग का उपयोग करना है, न कि NULL।

देख https://docs.djangoproject.com/en/1.10/ref/models/fields/#null

अधिकतम लंबाई:

यदि आप एक max_length विशेषता निर्दिष्ट करते हैं, तो यह होगामें परिलक्षित होता है ऑटो-जनरेट किए गए फॉर्म फ़ील्ड का टेक्टेरिया विजेट। हालाँकि ऐसा नहीं है मॉडल या डेटाबेस स्तर पर लागू किया गया। उसके लिए एक CharField का उपयोग करें।

https://docs.djangoproject.com/en/1.10/ref/models/fields/#textfield


संबंधित सवाल
सबसे लोकप्रिय