2016-09-01 2 views
1

私はdjangoに設定しているデータベースのフィールドから行を削除することに決めました。私はモデル/フォームでそれを削除し、完全にデータベースを再実行しました(makemigrations、migrate)。しかし、私が何をしても、整合性エラー(NULL制約に失敗しました:index_user.email)が得られています。フィールドがもはや存在しないので、なぜ私はこれを取得しているのかわからないし、ファイルの中にそれのトレースを見つけることができません。誰もこのエラーを解決する方法を知っていますか?djangoは完全性エラーを修正できません

モデル:

from django.db import models 

# Create your models here. 

class user(models.Model): 
    username = models.CharField(max_length=20) 
    password = models.CharField(max_length=15) 

    def __str__(self): 
     return self.username + ' - ' + self.password 

ビュー:

def login(request): 
    form = LoginForm(request.POST) 
    if form.is_valid(): 
     username = form.cleaned_data["username"] 
     password = form.cleaned_data["password"] 
     user = authenticate(username=username, password=password) 

     if user is not None: 
      if user.is_active: 
       login(request, user) 
       return redirect('loggedin.html') 
      else: 
       return HttpResponse("Account deleted or disabled") 
     else: 
      return HttpResponseRedirect('/invalid') 

    return render(request, "login_page.html", {'form': form}) 

形式:

class LoginForm(forms.Form): 
    username = forms.CharField() 
    password = forms.CharField(widget=forms.PasswordInput) 

def clean(self, *args, **kwargs): 
    username = self.cleaned_data.get("username") 
    password = self.cleaned_data.get("password") 
    if username and password: 
     user = authenticate(username=username, password=password) 
     if not user: 
      raise forms.ValidationError("User does not exist.") 
     if not user.is_active: 
      raise forms.ValidationError("User is no longer active.") 
    return super(UserLoginForm, self).clean(*args, **kwargs) 
+0

を移行それはあなたが私たちにあなたがそれらをどのように変化するかをどのようなあなたのモデル/フォームの外観のように、そしてどのようにあなたのマイグレーションが見えるを示すことなく、間違っているかを知ることは不可能の隣にあります好き。 – Khoi

+0

サイトの管理者の部分にあらかじめパッケージされているユーザーを変更しようとしましたか? –

+0

私はモデル/ビュー/フォームで投稿を更新しました。私が問題になっているのは、管理機能を使ってデータベースにユーザーを追加しようとしているときに、間違いが発生しているということです。 – Abjilla22

答えて

0

あなたがDjangoの内の任意のフィールドを削除するとき、あなたはその後、データベースのバックエンドとしてMySQLを使用している場合モデルでも、makemigrateを実行して移行すると、Mysqlは依然としてNOTは実際にデータベース内のそのフィールドまたは列を削除します。

したがって、カラムindex_user.emailは、あなたが削除したと思われますが、データベース内でエラーが発生するはずです。

djangoの移行ではなく、自分でその列を削除するには、mysqlコンソールまたは任意のmysqlのcilentに入る必要があります。

sqliteを使用している場合、残念ながらテーブルに列をドロップすることはできません。

あなたは下のリンクを見つけることができます

https://stackoverflow.com/a/8442173/4151886

とソリューション: あなたは下のリンク上の理由を確認することができます

https://stackoverflow.com/a/5987838/4151886

+0

私はsqlite3(dbはdjangoに組み込まれています)を使用しています。返信いただきありがとうございます! – Abjilla22

+0

こんにちは、私は私の答えを更新しました、あなたはそれをチェックアウトすることができます。 –

0

あなたが偽のマイグレーションを実行することができます。それは今のところエラーを渡すことができます。それでも問題が解決しない場合は、まずマイグレーションを削除してみてください。

のpython manage.py makemigrations のpython manage.py --fake

関連する問題