2015-12-10 50 views
1

我想创建一个彩票应用程序,它已经工作正常,但今天当我试图做一个python manage.py迁移lotteryapp它开始生产,其中指出Django的迁移产生奇怪的错误

django.db.utils.OperationalError: (1060, "Duplicate column name 'email'") 

错误所以我删除了电子邮件的所有参考资料,看看是否能解决这个问题,但它仍然会给出错误。然后我删除了数据库中的所有在一起,重新开始,但随后给了这个错误

ValueError: invalid literal for int() with base 10: '' 

我已经在我的models.py文件,并回去了,并再次运行该命令并再次给出了重复的列错误。这没有任何意义。这里是我的代码models.py:

from django.db import models 
from django.utils import timezone 
from datetime import datetime 

class Lottery(models.Model): 
    name = models.CharField(default="", max_length=50) 
    date_drawn = models.DateTimeField(default=datetime.now,blank=True) 
    win_amount = models.IntegerField(default=0) 
    winning_numbers = models.IntegerField(default="") 
    def __unicode__(self): 
     return self.name 

class Winner(models.Model): 
    first_name = models.CharField(max_length=100, default="") 
    last_name = models.CharField(max_length=100, default="") 
    winner_telephone = models.IntegerField(max_length=15, default="") 
    lottery_numbers = models.IntegerField(default=0) 
    lottery_won = models.CharField(max_length=50, default="") 
    def __unicode__(self): 
     return self.name 

class User(models.Model): 
    first_name = models.CharField(max_length=100, default="") 
    last_name = models.CharField(max_length=100, default="") 
    telephone = models.IntegerField(default="") 
    def __unicode__(self): 
     return self.first_name 

class entered_user(models.Model): 
    first_name = models.CharField(max_length=100, default="") 
    last_name = models.CharField(max_length=100, default="") 
    telephone = models.IntegerField(default="") 
    lottery_numbers = models.IntegerField(default="") 
    def __unicode__(self): 
     return self.first_name 
+0

我现在已经从删除的列电子邮件(我不知道为什么或如何在那里)和我已经跑了迁移再次,我现在得到ValueError:无效文字为int()与基10:''错误再次。此外,无论何时我做python manage.py makemigrations lotteryapp,它都会在数据库的entered_user表中添加一个电子邮件列,尽管他们没有参考models.py中的电子邮件 – CNB

+0

我现在已经将它设置为工作状态,但我没有找到问题的原因。我必须完全删除数据库和entered_user模型,并删除所有迁移并重新启动它。 – CNB

回答

1

的问题是与领域lottery_wonlottery_numbers。将默认值更改为0,然后重试。

+0

谢谢,但它仍然给出了相同的错误 – CNB

+0

您是否更改了胜利人数,winner_telephone,电话和相关领域。如果我们尝试将字符串转换为整数,则会出现“ValueError:int()”基数为10的无效字面值:'''。如果有任何迁移创建删除并重试 –

+0

我现在修复它,我认为我的数据库和迁移有问题,所以我删除了两个,并再次启动数据库。感谢您的帮助 – CNB

0
  1. IntegerField不能有默认字符串类型,也没有属性MAX_LENGTH

    • winning_numbers = models.IntegerField(默认值= “”)
    • winner_telephone =模型。 IntegerField(max_length = 15,default =“”)
    • telephone = models.IntegerField(default =“”)
    • lottery_numbers = models.IntegerField(默认值=“”)
  2. 避免调用模型的用户,因为它可能会导致冲突与默认的Django 用户型号并且可以为电子邮件错误信息的原因。

@CNB 我试过如下我只是改变了用户的usermodel代码和迁移工作正常:

from __future__ import unicode_literals 
from django.db import models 
from django.db import models 
from django.utils import timezone 
from datetime import datetime 

class Lottery(models.Model): 
    name = models.CharField(default="", max_length=50) 
    date_drawn = models.DateTimeField(default=datetime.now,blank=True) 
    win_amount = models.IntegerField(default=0) 
    winning_numbers = models.IntegerField(default=0) 
    def __unicode__(self): 
     return self.name 

class Winner(models.Model): 
    first_name = models.CharField(max_length=100, default="") 
    last_name = models.CharField(max_length=100, default="") 
    winner_telephone = models.IntegerField(default="") 
    lottery_numbers = models.IntegerField(default=0) 
    lottery_won = models.CharField(max_length=50, default="") 
    def __unicode__(self): 
     return self.name 

class UserModel(models.Model): 
    first_name = models.CharField(max_length=100, default="") 
    last_name = models.CharField(max_length=100, default="") 
    telephone = models.IntegerField(default=0) 
    def __unicode__(self): 
     return self.first_name 

class entered_user(models.Model): 
    first_name = models.CharField(max_length=100, default="") 
    last_name = models.CharField(max_length=100, default="") 
    telephone = models.IntegerField(default=0) 
    lottery_numbers = models.IntegerField(default=0) 
    def __unicode__(self): 
     return self.first_name 
+0

我现在已经将default =“”移除为默认值= 0,而用户现在是Lottery_User,但我仍然有同样的问题。这是非常烦人的,因为我运行迁移并获得无效的文字错误,然后再次运行它,我得到重复的列错误。我的模型文件中没有任何电子邮件,因此它如何添加它? – CNB

+0

正如我所提到的,尝试通过__Profile__或任何其他名称来更改__User__模型,因为我认为它正在与具有电子邮件字段的django默认用户模型冲突。 删除您的数据库,然后重试。 – DhiaTN

+0

我在前面的评论中提到我已经完成了这项工作,并且我也删除了数据库 – CNB