ImportError : no module named 'models'

Viewed 18453

The following code gives this error

ImportError : no module named 'models'

I don't know why. I am trying to customize my own registration form in django.

The error is in line:

from models import CustomUser in forms.py 

forms.py:

from django.contrib.auth.forms import UserCreationForm, UserChangeForm

from models import CustomUser

class CustomUserCreationForm(UserCreationForm):

def __init__(self, *args, **kargs):
    super(CustomUserCreationForm, self).__init__( *args, **kargs)
    del self.fields['username']

class Meta:
    model = CustomUser
    fields = ["email",]

class CustomUserChangeForm(UserChangeForm):

def __init__(self, *args, **kargs):
    super(CustomUserChangeForm, self).__init__(*args, **kargs)
    del self.fields['username']

 class Meta:
    model = CustomUser

register.html :

{% extends "account/base.html" %}
{% load crispy_forms_tags %}
 {% load i18n %}

{% block head_title %}{% trans "Signup" %}{% endblock %}

{% block content %}
<div class= 'col-md-4 col-md-offset-4'>
<h1>{% trans "Register" %}</h1>

<p>{% blocktrans %}Already have an account? Then please <a href="{{   login_url }}">sign in</a>.{% endblocktrans %}</p>

<form acction="account/register/" method="post">
 {% csrf_token %}
 {{ form|crispy }}


 <input type="submit" value="Register" />
 <button type="submit" class= 'btn btn-default'>{% trans "Sign Up" %} &raquo;</button>
</form>
 </div>
{% endblock %}

views.py:

from django.contrib.auth.decorators import login_required
from django.shortcuts import render, redirect 
from custom_user.forms import CustomUserCreationForm

#Create your views here
def home(request):
    return render(request, "home.html")

def login(request):
    c = {}
    c.update(csrf(request))
    return render(request, "login.html", c)

def auth_view(request):
    username = request.POST.get['username', '']
    password = request.POST.get['password', '']
    user = auth.authenticate(username=username, password=password)

    if user is not None:
        auth.login(request, user)
        return HTTpResponseRedirect('account/login')
    else:
        return HTTpResponseRedirect('account/login')


def logout(request):
    auth.logout(request)
    return render(request, 'logout.html')
1 Answers

you need to add dot

from .models import CustomUser
#   ^^^

o best way use app_name

from custom_user.models import CustomUser

and for your second error, you can simple add empty exclude to the Meta:

class CustomUserChangeForm(UserChangeForm):

def __init__(self, *args, **kargs):
    super(CustomUserChangeForm, self).__init__(*args, **kargs)
    del self.fields['username']

 class Meta:
    model = CustomUser
    exclude = () # THIS ROW
Related