0 Вопрос: ValueError: ModelForm не указан класс модели

вопрос создан в Wed, Apr 10, 2019 12:00 AM

Я новичок в Django и пытаюсь создать веб-страницу с двумя кнопками отправки: одна для входа и одна для регистрации. После добавления классов моделей для базы данных произошла эта ошибка. (предварительный код модели прокомментирован со знаком #). Не удается найти ответы в Интернете или в документации по Django по этому вопросу.

authentication.html

<form method="POST">
                    {% csrf_token %}
                    <fieldset class="form-group">
                        <legend class="border-bottom-mb-4">Login User</legend>
                        {{Lform|crispy}}
                    </fieldset>
                    <div class="form-group">
                        <button class="btn btn-outline-info" type="submit" name="login">Login</button>
                    </div>
                </form>
            </div>
        </div>
        <div class="col-md-6">
            <div class="content-selection">
                <form method="POST">
                    {% csrf_token %}
                    <fieldset class="form-group">
                        <legend class="border-bottom-mb-4">Register User</legend>
                        {{Rform|crispy}}
                    </fieldset>
                    <div class="form-group">
                        <button class="btn btn-outline-info" type="submit" name="register">Register</button>
                    </div>
                </form>

Ниже представлен views.py

views.py

from django.shortcuts import render, redirect
from django.contrib import messages
from .forms import login, register


def home(request):
    return render(request,"authentication/home.html",{})

def authentication(request):
    if request.method=='POST':
        Lform=login(request.POST)
        Rform=register(request.POST)
        if Lform.is_valid():
            email = Lform.cleaned_data.get('Email')
            password = Lform.cleaned_data.get('Password')
            messages.success(request,email+' loged in')
            return redirect('home')
        elif Rform.is_valid():
            name=Rform.cleaned_data.get('name')
            email = Rform.cleaned_data.get('email')
            password = hash(Rform.cleaned_data.get('password'))
            confirm_password = hash(Rform.cleaned_data.get('confirm_password'))
            if password == confirm_password:
                messages.success(request,name+' registered')
                return redirect('home')
            else:
                messages.error(request,'password dont match')
                return redirect('authentication')
    else:
        print('page')
        Lform=login()
        Rform=register()
    return render(request,"authentication/authentication.html", {'Lform':Lform,'Rform':Rform})

forms.py

from django import forms
from .models import Authentication

class login(forms.Form):
    Email = forms.EmailField(widget=forms.TextInput(attrs={'placeholder':'Email'}))###Capital E in email for login
    Password = forms.CharField(widget=forms.PasswordInput())###Capital P in Password for login

class register(forms.Form,forms.ModelForm):
    class meta:
        model = Authentication
        fields = '__all__'
        widgets = {
            'name': forms.TextInput(attrs={'placeholder': 'Name'}),
            'email': forms.TextInput(attrs={'placeholder': 'Email'}),
            'password': forms.PasswordInput(),
        }
        labels = {
            'name':'Name',
            'email':'Email-id',
            'password':'Password',
        }
    ####name = forms.CharField(widget=forms.TextInput(attrs={'placeholder':'Name'}))
    ####email = forms.EmailField(widget=forms.TextInput(attrs={'placeholder':'Email'}))
    #####password = forms.CharField(widget=forms.PasswordInput())
    confirm_password =forms.CharField(widget=forms.PasswordInput())
    def __init__(self, *args, **kwargs):
        super(register, self).__init__(*args, **kwargs)
        self.fields['confirm_password'].label = "Confirm Password"

models.py

from django.db import models
class Authentication(models.Model):
    name = models.CharField(max_length=20)
    email = models.EmailField(primary_key = True,max_length=20)
    password = models.CharField(max_length=20)

    def __str__(self):
        return self.name
Request Method: GET
Request URL:    http://localhost:8000/auth/
Django Version: 2.1.7
Exception Type: ValueError
Exception Value:    
ModelForm has no model class specified.
Exception Location: D:\Python\lib\site-packages\django\forms\models.py in __init__, line 285
Python Executable:  D:\Python\Scripts\python.exe
Python Version: 3.7.2''''

''''D:\Python\login\authentication\views.py in authentication
        Rform=register() ...
▶ Local vars
D:\Python\lib\site-packages\django\forms\models.py in __init__
            raise ValueError('ModelForm has no model class specified.') ...
▶ Local vars

У меня есть еще одна проблема - добавить кнопку входа в модель. Для этого я должен изменить имя в классе login.py. Невозможно определить метатег для изменения имени поля при получении входных данных в forms.py при получении атрибута от models.py.

    
0
  1. Попробуйте изменить meta на Meta в forms.py
    2019-04-10 10: 41: 37Z
  2. также вашей форме не нужно наследовать от Form, ModelForm уже это делает.
    2019-04-10 10: 47: 22Z
  3. Это сработало. Большое спасибо @ShuvojitSarkar.
    2019-04-10 10: 55: 10Z
0 ответов                              0                         
источник размещен Вот