Reputation: 1
I'm setting up a user registration / login / search program and when I try to find users by email and show them on the site it's like they do not find it in the database, but it's there.
views.py
from django.shortcuts import render
from django.views.generic import CreateView, TemplateView
from django.http import HttpResponseRedirect
from django.contrib.auth.views import login, logout
from django.core.urlresolvers import reverse_lazy, reverse
from .forms import CustomUserCreationForm
from .models import MyUser
def home(request):
return render(request, 'usuarios/home.html')
def login_view(request, *args, **kwargs):
if request.user.is_authenticated():
return HttpResponseRedirect(reverse('usuarios:home'))
kwargs['template_name'] = 'usuarios/login.html'
kwargs['extra_context'] = {'next': reverse('usuarios:home')}
return login(request, *args, **kwargs)
def logout_view(request, *args, **kwargs):
kwargs['next_page'] = reverse('usuarios:home')
return logout(request, *args, **kwargs)
class SerchView(TemplateView):
template_name = "usuarios/pesquisar.html"
def search_view(request, **kwargs):
email = MyUser(email = request.GET['email'], nome = request.GET['nome'])
myusers = MyUser.objects.filter(email__contains = 'email')
context = {'myusers': myusers}
kwargs['extra_context'] = {'next': reverse('usuarios:pesquisar')}
print (request.GET)
return render(request, context, **kwargs)
class RegistrationView(CreateView):
form_class = CustomUserCreationForm
success_url = reverse_lazy('usuarios:login')
template_name = "usuarios/registrar.html"
models.py
from django.db import models
from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
from django.contrib.auth.models import PermissionsMixin
class EmailUserManager(BaseUserManager):
def create_user(self, *args, **kwargs):
email = kwargs["email"]
email = self.normalize_email(email)
password = kwargs["password"]
kwargs.pop("password")
if not email:
raise ValueError(('Usuário deve inserir um endereço de e-mail.'))
user = self.model(**kwargs)
user.set_password(password)
user.save(using = self._db)
return user
def create_superuser(self, *args, **kwargs):
user = self.create_user(**kwargs)
user.is_superuser = True
user.save(using = self._db)
return user
class MyUser(PermissionsMixin, AbstractBaseUser):
email = models.EmailField(
verbose_name = ('Endereço de E-mail'),
unique = True,
)
nome = models.CharField(
verbose_name = ('Nome'),
max_length = 50,
blank = False, #Não permite um valor 'vazio'
help_text = ('Informe seu nome completo.'),
)
USERNAME_FIELD = 'email'
objects = EmailUserManager()
pesquisar.html
<h1>Busca de Usuários</h1>
<html>
<body>
<form role = "form" class = "form" method = "GET" action = "{{ request.path }}{% if next %}?next={{ next }}{% endif %}">
{% csrf_token %}
<h5></h5>
<label for="email">E-mail <input type="text" name="email"></label>
<input type = "submit" value='Pesquisar' />
<h5></h5>
</form>
<table border="1">
<thead>
<th>Nome</th>
<th>E-mail</th>
</thead>
<tbody>
{% for myuser in myusers %}
<tr>
<td> {{ myuser.nome }} {{ myuser.email }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</body>
</html>
I can not figure out what I'm doing wrong. Can someone point me in the right direction? Thank you in advance!
Upvotes: 0
Views: 42
Reputation: 4883
This part of the code makes no sense:
email = MyUser(email = request.GET['email'], nome = request.GET['nome'])
myusers = MyUser.objects.filter(email__contains = 'email')
maybe you meant something like:
myusers = MyUser.objects.filter(email__contains = request.GET['email'])
Upvotes: 1