जब मैं अपने डेटाबेस में नया डेटा जोड़ने का प्रयास कर रहा हूं, तो मुझे एक मान त्रुटि मिल रही है।
मेरे मॉडल.py:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models
from django.contrib.auth.models import User
DEFAULT_ROLE_ID=1
class UserProfile(models.Model):
user= models.OneToOneField(User)
avatar= models.ImageField(upload_to='Images/users', verbose_name='Image')
rating=models.IntegerField(default=0)
karma=models.IntegerField(default=0)
def __unicode__(self):
return unicode(self.user)
class Room(models.Model):
title=models.CharField(max_length=63,default='test')
time_creation=models.DateTimeField('Time of room creation')
users=models.ManyToManyField(UserProfile)
def __unicode__(self):
return unicode(self.title)
class Game(models.Model):
title=models.CharField(max_length=63,default='test')
time_creation=models.DateTimeField('Время создания')
room=models.ForeignKey(Room)
def __unicode__(self):
return unicode(self.title)
class SecretWord(models.Model):
word=models.CharField(max_length=255)
game=models.ForeignKey(Game)
def __unicode__(self):
return unicode(self.word)
class UserRole(models.Model):
PLAYER = 'PL'
LIDER = 'LID'
ROLE_CHOICES = (
(LIDER, 'Lider'),
(PLAYER, 'Player'),
)
user=models.ForeignKey(UserProfile,default=1)
game=models.ForeignKey(Game,default=1)
role = models.CharField(max_length=3,choices=ROLE_CHOICES,default=LIDER)
def __unicode__(self):
return unicode(self.role)
class Message(models.Model):
text=models.TextField(max_length=2047)
time_creation=models.DateTimeField('Time of room creation')
room=models.ForeignKey(Room)
user=models.ForeignKey(UserProfile)
user_role=models.ForeignKey(UserRole, default=DEFAULT_ROLE_ID)
def __unicode__(self):
return unicode(self.text)
त्रुटि है:
Applying hat.0030_auto_20160421_1632...Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/home/aska1/prog/prog/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 353, in execute_from_command_line
utility.execute()
File "/home/aska1/prog/prog/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 345, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/aska1/prog/prog/local/lib/python2.7/site-packages/django/core/management/base.py", line 348, in run_from_argv
self.execute(*args, **cmd_options)
File "/home/aska1/prog/prog/local/lib/python2.7/site-packages/django/core/management/base.py", line 399, in execute
output = self.handle(*args, **options)
File "/home/aska1/prog/prog/local/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 200, in handle
executor.migrate(targets, plan, fake=fake, fake_initial=fake_initial)
File "/home/aska1/prog/prog/local/lib/python2.7/site-packages/django/db/migrations/executor.py", line 92, in migrate
self._migrate_all_forwards(plan, full_plan, fake=fake, fake_initial=fake_initial)
File "/home/aska1/prog/prog/local/lib/python2.7/site-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 "/home/aska1/prog/prog/local/lib/python2.7/site-packages/django/db/migrations/executor.py", line 198, in apply_migration
state = migration.apply(state, schema_editor)
File "/home/aska1/prog/prog/local/lib/python2.7/site-packages/django/db/migrations/migration.py", line 123, in apply
operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
File "/home/aska1/prog/prog/local/lib/python2.7/site-packages/django/db/migrations/operations/fields.py", line 62, in database_forwards
field,
File "/home/aska1/prog/prog/local/lib/python2.7/site-packages/django/db/backends/mysql/schema.py", line 50, in add_field
super(DatabaseSchemaEditor, self).add_field(model, field)
File "/home/aska1/prog/prog/local/lib/python2.7/site-packages/django/db/backends/base/schema.py", line 382, in add_field
definition, params = self.column_sql(model, field, include_default=True)
File "/home/aska1/prog/prog/local/lib/python2.7/site-packages/django/db/backends/base/schema.py", line 145, in column_sql
default_value = self.effective_default(field)
File "/home/aska1/prog/prog/local/lib/python2.7/site-packages/django/db/backends/base/schema.py", line 210, in effective_default
default = field.get_db_prep_save(default, self.connection)
File "/home/aska1/prog/prog/local/lib/python2.7/site-packages/django/db/models/fields/related.py", line 915, in get_db_prep_save
return self.target_field.get_db_prep_save(value, connection=connection)
File "/home/aska1/prog/prog/local/lib/python2.7/site-packages/django/db/models/fields/__init__.py", line 728, in get_db_prep_save
prepared=False)
File "/home/aska1/prog/prog/local/lib/python2.7/site-packages/django/db/models/fields/__init__.py", line 968, in get_db_prep_value
value = self.get_prep_value(value)
File "/home/aska1/prog/prog/local/lib/python2.7/site-packages/django/db/models/fields/__init__.py", line 976, in get_prep_value
return int(value)
ValueError: invalid literal for int() with base 10: 'Player'
मैंने कोड के विभिन्न हिस्सों पर टिप्पणी करने की कोशिश की है, लेकिन यह भी नहीं समझ पाया कि वास्तव में किस स्थान पर, जहां मैं UserRole मॉडल के डेटा का उपयोग करता हूं, मैंने एक गलती की।
अनुलेख और मैंने अभी देखा: जब मैं अपना कोड बदलता हूं और 'पायथन manage.py माइग्रेट' का उपयोग करता हूं तो मुझे यह त्रुटि मिलती है:
Operations to perform:
Apply all migrations: admin, contenttypes, hat, auth, sessions
Running migrations:
Applying hat.0030_auto_20160421_1632...Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/home/aska1/prog/prog/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 353, in execute_from_command_line
utility.execute()
File "/home/aska1/prog/prog/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 345, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/aska1/prog/prog/local/lib/python2.7/site-packages/django/core/management/base.py", line 348, in run_from_argv
self.execute(*args, **cmd_options)
File "/home/aska1/prog/prog/local/lib/python2.7/site-packages/django/core/management/base.py", line 399, in execute
output = self.handle(*args, **options)
File "/home/aska1/prog/prog/local/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 200, in handle
executor.migrate(targets, plan, fake=fake, fake_initial=fake_initial)
File "/home/aska1/prog/prog/local/lib/python2.7/site-packages/django/db/migrations/executor.py", line 92, in migrate
self._migrate_all_forwards(plan, full_plan, fake=fake, fake_initial=fake_initial)
File "/home/aska1/prog/prog/local/lib/python2.7/site-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 "/home/aska1/prog/prog/local/lib/python2.7/site-packages/django/db/migrations/executor.py", line 198, in apply_migration
state = migration.apply(state, schema_editor)
File "/home/aska1/prog/prog/local/lib/python2.7/site-packages/django/db/migrations/migration.py", line 123, in apply
operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
File "/home/aska1/prog/prog/local/lib/python2.7/site-packages/django/db/migrations/operations/models.py", line 59, in database_forwards
schema_editor.create_model(model)
File "/home/aska1/prog/prog/local/lib/python2.7/site-packages/django/db/backends/base/schema.py", line 284, in create_model
self.execute(sql, params or None)
File "/home/aska1/prog/prog/local/lib/python2.7/site-packages/django/db/backends/base/schema.py", line 110, in execute
cursor.execute(sql, params)
File "/home/aska1/prog/prog/local/lib/python2.7/site-packages/django/db/backends/utils.py", line 79, in execute
return super(CursorDebugWrapper, self).execute(sql, params)
File "/home/aska1/prog/prog/local/lib/python2.7/site-packages/django/db/backends/utils.py", line 64, in execute
return self.cursor.execute(sql, params)
File "/home/aska1/prog/prog/local/lib/python2.7/site-packages/django/db/utils.py", line 95, in __exit__
six.reraise(dj_exc_type, dj_exc_value, traceback)
File "/home/aska1/prog/prog/local/lib/python2.7/site-packages/django/db/backends/utils.py", line 62, in execute
return self.cursor.execute(sql)
File "/home/aska1/prog/prog/local/lib/python2.7/site-packages/django/db/backends/mysql/base.py", line 112, in execute
return self.cursor.execute(query, args)
File "/home/aska1/prog/prog/local/lib/python2.7/site-packages/MySQLdb/cursors.py", line 205, in execute
self.errorhandler(self, exc, value)
File "/home/aska1/prog/prog/local/lib/python2.7/site-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
raise errorclass, errorvalue
django.db.utils.OperationalError: (1050, "Table 'hat_usergame' already exists")
लेकिन टेबल 'यूजरगेम' का एक और नाम है - 'यूजररोल'। मुझे इस गलती की इतनी आदत हो गई है कि मुझे पता ही नहीं चला। मैं आमतौर पर django-extensions से कमांड 'python manage.py reset_db' का उपयोग करता हूं। और उसके बाद सब कुछ काम करता है। जैसा कि मैं समझता हूं, मुझे पुराने माइग्रेशन को हटा देना चाहिए, है ना? शायद यह मेरी एक और त्रुटि को ठीक कर सकता है?
मैं Django में नौसिखिया हूं, इसलिए शायद मैं प्राथमिक चीजों को समझ नहीं पा रहा हूं।
परिणामस्वरूप, माइग्रेशन संख्या 0030 से शुरुआत करते हुए, माइग्रेशन को हटाकर समस्या का समाधान किया गया, जब सब कुछ गलत हो गया।
माइग्रेशन की सूची देखना:
python manage.py migrate --list
app
(*) 0001_initial
(*) 0002_auto__...
(*) 0003_auto__...
(*) 0004_auto__...
अंतिम सही माइग्रेशन लागू करना और निम्नलिखित को हटाना:
./manage.py migrate app 0003
rm app/migrations/0004*
1 उत्तर
तो एक बात पक्की है। माइग्रेशन चलाते समय आपको जो त्रुटि मिल रही है, वह यह है कि django उन फ़ाइलों में से एक को पढ़ रहा है जो मेकमाइग्रेशन बनाती हैं और जिसमें 'usergame' टेबल होती। हालांकि, माइग्रेशन को वापस लेना कभी-कभी एक दर्द हो सकता है (पुरानी माइग्रेशन फ़ाइल को हटाना एक तरीका है), लेकिन रीसेट_डीबी कमांड चलाकर, आप प्रभावी रूप से डीबी को छोड़ रहे हैं और इसे फिर से बना रहे हैं। मैं आम तौर पर इस मामले में क्या करूंगा, पहले डीबी ड्रॉप करें, फिर मेकमाइग्रेशन चलाएं और फिर माइग्रेशन चलाएं। लेकिन, इस मामले में, केवल तभी माइग्रेशन चलाएं जब आप अपने मॉडल के बारे में सुनिश्चित हों। अपने मॉडल को अंतिम रूप दें, python manage.py makemigrations चलाएं और बाद में माइग्रेट कमांड चलाएं।
दूसरे, आपने अपने दूसरे पैराग्राफ में लिखा है कि जब आपने अपना कोड बदल दिया और माइग्रेशन चलाया, तो आपको त्रुटि मिली। अब, आपके (संशोधित) मॉडल को देखने और आपको मिली त्रुटि (अमान्य शाब्दिक) से संबंधित होने के बाद, आपकी त्रुटि के पीछे के कारण को समझना थोड़ा मुश्किल है (क्योंकि आपका मॉडल ठीक लगता है)। सबसे अच्छा संभव सिद्धांत, जिसके साथ मैं आया था: चूंकि ValueError: invalid literal for int() with base 10
एक ऐसे क्षेत्र में आता है जो पूर्णांक स्वीकार करता है और उस क्षेत्र में, आप फ्लोट की आपूर्ति कर रहे हैं। तो, या तो उस क्षेत्र को फ्लोटफिल्ड में परिवर्तित करें या उस क्षेत्र में सही मूल्यों की आपूर्ति करें (मुझे यकीन है कि आपको इस तथ्य के बारे में पता होना चाहिए, लेकिन केवल इस मामले में लिखना: यहां तक कि 8.0000 भी एक int नहीं है, यह एक फ्लोट है)।
अपने माइग्रेशन को वापस लेने पर एक शॉट लें और संभवत:, जब नए मॉडल आपके डीबी में आते हैं, उम्मीद है कि समस्या हल हो सकती है।
संबंधित सवाल
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।