我会直截了当地说:南方正在提出这个例外:
Microsoft Windows [versão 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. Todos os direitos reservados.
C:\Users\Bassut\PycharmProjects\Logos>manage.py migrate api
Running migrations for api:
- Migrating forwards to 0001_initial.
> api:0001_initial
FailedDryRun: ! Error found during dry run of '0001_initial'! Aborting.
Traceback (most recent call last):
File "C:\Python27\lib\site-packages\south-0.7.5-py2.7.egg\south\migration\migr
ators.py", line 175, in _run_migration
migration_function()
File "C:\Python27\lib\site-packages\south-0.7.5-py2.7.egg\south\migration\migr
ators.py", line 57, in <lambda>
return (lambda: direction(orm))
File "C:\Users\Bassut\PycharmProjects\Logos\migrations\0001_initial.py", line
44, in forwards
('course', self.gf('django.db.models.fields.related.ForeignKey')(default=Fal
se, to=orm['api.Course'])),
File "C:\Python27\lib\site-packages\south-0.7.5-py2.7.egg\south\db\generic.py"
, line 44, in _cache_clear
return func(self, table, *args, **opts)
File "C:\Python27\lib\site-packages\south-0.7.5-py2.7.egg\south\db\generic.py"
, line 343, in create_table
for field_name, field in fields
File "C:\Python27\lib\site-packages\south-0.7.5-py2.7.egg\south\db\generic.py"
, line 684, in column_sql
default = field.get_db_prep_save(default, connection=self._get_connection())
File "C:\Python27\lib\site-packages\django\db\models\fields\related.py", line
1047, in get_db_prep_save
connection=connection)
File "C:\Python27\lib\site-packages\django\db\models\fields\__init__.py", line
304, in get_db_prep_save
prepared=False)
File "C:\Python27\lib\site-packages\django\db\models\fields\__init__.py", line
549, in get_db_prep_value
value = connection.ops.validate_autopk_value(value)
File "C:\Python27\lib\site-packages\django\db\backends\mysql\base.py", line 28
8, in validate_autopk_value
raise ValueError('The database backend does not accept 0 as a '
ValueError: The database backend does not accept 0 as a value for AutoField.
C:\Users\Bassut\PycharmProjects\Logos>
models.py:
# -*- coding: utf-8 -*-
from django.db import models
from django.contrib.auth.models import User
import datetime
class College(models.Model):
acronym = models.CharField(max_length=10)
full_name = models.CharField(max_length=100)
class Meta():
db_table = "College"
def __unicode__(self):
return self.full_name
class Course(models.Model):
title = models.CharField(max_length=50)
class Meta():
db_table = "Course"
def __unicode__(self):
return self.title
class BasicUser(models.Model):
user = models.ForeignKey(User)
birthday = models.DateField()
class Meta():
db_table = 'BasicUser'
def __unicode__(self):
return (self.user.first_name + ' ' + self.user.last_name)
class Administrator(BasicUser):
def __unicode__(self):
return self.user.first_name
class Meta():
db_table = "Administrator"
class Student(BasicUser):
college = models.ForeignKey(College, default=False)
course = models.ForeignKey(Course, default=False)
def __unicode__(self):
return self.user.first_name
class Meta():
db_table = "Student"
class Subject(models.Model):
title = models.CharField(max_length=50)
class Meta():
db_table = "Subject"
def __unicode__(self):
return self.title
class Division(models.Model):
title = models.CharField(max_length=50)
subject = models.ForeignKey(Subject)
class Meta():
db_table = "Division"
def __unicode__(self):
return self.title
class Topic(models.Model):
division = models.ForeignKey(Division)
title = models.CharField(max_length=50)
class Meta():
db_table = "Topic"
def __unicode__(self):
return self.title
def get_subject(self):
return self.division.subject
class Material(models.Model):
topic = models.ForeignKey(Topic)
added_by = models.ForeignKey(Administrator, verbose_name=u'Who added this material', default=False)
title = models.CharField(max_length=50)
text = models.TextField(max_length=5000)
class Meta():
db_table = "Material"
def __unicode__(self):
return self.title
def set_subject(self, value):
self.topic.division.subject = value
def set_division(self, value):
self.topic.division = value
class QuestionOption(models.Model):
description = models.CharField(max_length=5000, verbose_name=u'The question option itself')
def __unicode__(self):
return self.description
class Meta():
db_table = 'question_option'
class Question(models.Model):
topic = models.ForeignKey(Topic, verbose_name=u'What that question is about')
added_by = models.ForeignKey(Administrator, verbose_name=u'Who added this question', default=False)
difficulty = models.FloatField(default=0)
type = models.CharField(max_length=30, verbose_name=u'Tipo da questão', default='multichoices')
college = models.ForeignKey(College, verbose_name=u'From what college is the question')
year = models.SmallIntegerField(default=datetime.date.today().year)
text = models.TextField(max_length=30000)
options = models.ManyToManyField(QuestionOption, related_name='question_alternatives', db_table=u'question_alternatives',
verbose_name=u'Question alternatives')
right_one = models.ForeignKey(QuestionOption, verbose_name=u'Right option for this question', default=False)
class Meta():
db_table='question'
def __unicode__(self):
return self.title
def mount_question(self):
return '(' + self.college.acronym + '-' + str(self.year) + ') ' + self.text
此外,0001_initial.py(控制台说了些什么):
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding model 'College'
db.create_table('College', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('acronym', self.gf('django.db.models.fields.CharField')(max_length=10)),
('full_name', self.gf('django.db.models.fields.CharField')(max_length=100)),
))
db.send_create_signal(u'api', ['College'])
# Adding model 'Course'
db.create_table('Course', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('title', self.gf('django.db.models.fields.CharField')(max_length=50)),
))
db.send_create_signal(u'api', ['Course'])
# Adding model 'BasicUser'
db.create_table('BasicUser', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'])),
('birthday', self.gf('django.db.models.fields.DateField')()),
))
db.send_create_signal(u'api', ['BasicUser'])
# Adding model 'Administrator'
db.create_table('Administrator', (
(u'basicuser_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['api.BasicUser'], unique=True, primary_key=True)),
))
db.send_create_signal(u'api', ['Administrator'])
# Adding model 'Student'
db.create_table('Student', (
(u'basicuser_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['api.BasicUser'], unique=True, primary_key=True)),
('college', self.gf('django.db.models.fields.related.ForeignKey')(default=False, to=orm['api.College'])),
('course', self.gf('django.db.models.fields.related.ForeignKey')(default=False, to=orm['api.Course'])),
))
db.send_create_signal(u'api', ['Student'])
# Adding model 'Subject'
db.create_table('Subject', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('title', self.gf('django.db.models.fields.CharField')(max_length=50)),
))
db.send_create_signal(u'api', ['Subject'])
# Adding model 'Division'
db.create_table('Division', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('title', self.gf('django.db.models.fields.CharField')(max_length=50)),
('subject', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['api.Subject'])),
))
db.send_create_signal(u'api', ['Division'])
# Adding model 'Topic'
db.create_table('Topic', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('division', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['api.Division'])),
('title', self.gf('django.db.models.fields.CharField')(max_length=50)),
))
db.send_create_signal(u'api', ['Topic'])
# Adding model 'Material'
db.create_table('Material', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('topic', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['api.Topic'])),
('added_by', self.gf('django.db.models.fields.related.ForeignKey')(default=False, to=orm['api.Administrator'])),
('title', self.gf('django.db.models.fields.CharField')(max_length=50)),
('text', self.gf('django.db.models.fields.TextField')(max_length=5000)),
))
db.send_create_signal(u'api', ['Material'])
# Adding model 'QuestionOption'
db.create_table('question_option', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('description', self.gf('django.db.models.fields.CharField')(max_length=5000)),
))
db.send_create_signal(u'api', ['QuestionOption'])
# Adding model 'Question'
db.create_table('question', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('topic', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['api.Topic'])),
('added_by', self.gf('django.db.models.fields.related.ForeignKey')(default=False, to=orm['api.Administrator'])),
('difficulty', self.gf('django.db.models.fields.FloatField')(default=0)),
('type', self.gf('django.db.models.fields.CharField')(default='multichoices', max_length=30)),
('college', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['api.College'])),
('year', self.gf('django.db.models.fields.SmallIntegerField')(default=2013)),
('text', self.gf('django.db.models.fields.TextField')(max_length=30000)),
('right_one', self.gf('django.db.models.fields.related.ForeignKey')(default=False, to=orm['api.QuestionOption'])),
))
db.send_create_signal(u'api', ['Question'])
# Adding M2M table for field options on 'Question'
db.create_table(u'question_alternatives', (
('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
('question', models.ForeignKey(orm[u'api.question'], null=False)),
('questionoption', models.ForeignKey(orm[u'api.questionoption'], null=False))
))
db.create_unique(u'question_alternatives', ['question_id', 'questionoption_id'])
def backwards(self, orm):
# Deleting model 'College'
db.delete_table('College')
# Deleting model 'Course'
db.delete_table('Course')
# Deleting model 'BasicUser'
db.delete_table('BasicUser')
# Deleting model 'Administrator'
db.delete_table('Administrator')
# Deleting model 'Student'
db.delete_table('Student')
# Deleting model 'Subject'
db.delete_table('Subject')
# Deleting model 'Division'
db.delete_table('Division')
# Deleting model 'Topic'
db.delete_table('Topic')
# Deleting model 'Material'
db.delete_table('Material')
# Deleting model 'QuestionOption'
db.delete_table('question_option')
# Deleting model 'Question'
db.delete_table('question')
# Removing M2M table for field options on 'Question'
db.delete_table('question_alternatives')
models = {
u'api.administrator': {
'Meta': {'object_name': 'Administrator', 'db_table': "'Administrator'", '_ormbases': [u'api.BasicUser']},
u'basicuser_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['api.BasicUser']", 'unique': 'True', 'primary_key': 'True'})
},
u'api.basicuser': {
'Meta': {'object_name': 'BasicUser', 'db_table': "'BasicUser'"},
'birthday': ('django.db.models.fields.DateField', [], {}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"})
},
u'api.college': {
'Meta': {'object_name': 'College', 'db_table': "'College'"},
'acronym': ('django.db.models.fields.CharField', [], {'max_length': '10'}),
'full_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'api.course': {
'Meta': {'object_name': 'Course', 'db_table': "'Course'"},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'title': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'api.division': {
'Meta': {'object_name': 'Division', 'db_table': "'Division'"},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'subject': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['api.Subject']"}),
'title': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'api.material': {
'Meta': {'object_name': 'Material', 'db_table': "'Material'"},
'added_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'False', 'to': u"orm['api.Administrator']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'text': ('django.db.models.fields.TextField', [], {'max_length': '5000'}),
'title': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
'topic': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['api.Topic']"})
},
u'api.question': {
'Meta': {'object_name': 'Question', 'db_table': "'question'"},
'added_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'False', 'to': u"orm['api.Administrator']"}),
'college': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['api.College']"}),
'difficulty': ('django.db.models.fields.FloatField', [], {'default': '0'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'options': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'question_alternatives'", 'symmetrical': 'False', 'db_table': "u'question_alternatives'", 'to': u"orm['api.QuestionOption']"}),
'right_one': ('django.db.models.fields.related.ForeignKey', [], {'default': 'False', 'to': u"orm['api.QuestionOption']"}),
'text': ('django.db.models.fields.TextField', [], {'max_length': '30000'}),
'topic': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['api.Topic']"}),
'type': ('django.db.models.fields.CharField', [], {'default': "'multichoices'", 'max_length': '30'}),
'year': ('django.db.models.fields.SmallIntegerField', [], {'default': '2013'})
},
u'api.questionoption': {
'Meta': {'object_name': 'QuestionOption', 'db_table': "'question_option'"},
'description': ('django.db.models.fields.CharField', [], {'max_length': '5000'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'api.student': {
'Meta': {'object_name': 'Student', 'db_table': "'Student'", '_ormbases': [u'api.BasicUser']},
u'basicuser_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['api.BasicUser']", 'unique': 'True', 'primary_key': 'True'}),
'college': ('django.db.models.fields.related.ForeignKey', [], {'default': 'False', 'to': u"orm['api.College']"}),
'course': ('django.db.models.fields.related.ForeignKey', [], {'default': 'False', 'to': u"orm['api.Course']"})
},
u'api.subject': {
'Meta': {'object_name': 'Subject', 'db_table': "'Subject'"},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'title': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'api.topic': {
'Meta': {'object_name': 'Topic', 'db_table': "'Topic'"},
'division': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['api.Division']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'title': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'auth.group': {
'Meta': {'object_name': 'Group'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
u'auth.permission': {
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'auth.user': {
'Meta': {'object_name': 'User'},
'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
},
u'contenttypes.contenttype': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
}
}
complete_apps = ['api']
请告诉我发生了什么,以便我能解决。
提前致谢!
答案 0 :(得分:3)
问题在于,您为ForeignKey
定义的Student
设置了default=False
。 False
是ForeignKey
的无效值。只需删除它们就可以了。