AttributeError: 'str' object has no attribute '_meta'

Я программист-новичок. Пытаюсь сделать регистрацию на сайте, но при регистрации мне выводит ошибку:

AttributeError: 'str' object has no attribute '_meta'

Полный текст ошибки:

Not Found: / [11/Mar/2020 21:00:31] "GET / HTTP/1.1" 404 2028 Not Found: /favicon.ico [11/Mar/2020 21:00:31] "GET /favicon.ico HTTP/1.1" 404 2079 Not Found: /register [11/Mar/2020 21:00:39] "GET /register HTTP/1.1" 404 2070 [11/Mar/2020 21:00:43] "GET /api/register HTTP/1.1" 301 0 [11/Mar/2020 21:00:43] "GET /api/register/ HTTP/1.1" 200 668 if Internal Server Error: /api/register/ Traceback (most recent call last): File "C:\Users\Егор\Desktop\папка для всего\Python\lib\site-packages\django\core\handlers\exception.py", line 34, in inner response = get_response(request) File "C:\Users\Егор\Desktop\папка для всего\Python\lib\site-packages\django\core\handlers\base.py", line 126, in _get_response response = self.process_exception_by_middleware(e, request) File "C:\Users\Егор\Desktop\папка для всего\Python\lib\site-packages\django\core\handlers\base.py", line 124, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "C:\Users\Егор\Desktop\папка для всего\Python\lib\site-packages\django\views\generic\base.py", line 68, in view return self.dispatch(request, *args, **kwargs) File "D:\Rep-master\baker\views.py", line 79, in dispatch Register.save(reg1.username, reg1.email, reg1.password) File "C:\Users\Егор\Desktop\папка для всего\Python\lib\site-packages\django\db\models\base.py", line 653, in save for field in self._meta.concrete_fields: AttributeError: 'str' object has no attribute '_meta' [11/Mar/2020 21:00:50] "POST /api/register/ HTTP/1.1" 500 76177 Performing system checks...

System check identified no issues (0 silenced). March 11, 2020 - 21:01:01 Django version 2.1.3, using settings 'etaBakers.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CTRL-BREAK.

D:\Rep-master>python manage.py runserver Performing system checks...

System check identified no issues (0 silenced). March 11, 2020 - 21:01:36 Django version 2.1.3, using settings 'etaBakers.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CTRL-BREAK. Not Found: / [11/Mar/2020 21:01:37] "GET / HTTP/1.1" 404 2028 [11/Mar/2020 21:01:42] "GET /api/register/ HTTP/1.1" 200 668 if Internal Server Error: /api/register/ Traceback (most recent call last): File "C:\Users\Егор\Desktop\папка для всего\Python\lib\site-packages\django\core\handlers\exception.py", line 34, in inner response = get_response(request) File "C:\Users\Егор\Desktop\папка для всего\Python\lib\site-packages\django\core\handlers\base.py", line 126, in _get_response response = self.process_exception_by_middleware(e, request) File "C:\Users\Егор\Desktop\папка для всего\Python\lib\site-packages\django\core\handlers\base.py", line 124, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "C:\Users\Егор\Desktop\папка для всего\Python\lib\site-packages\django\views\generic\base.py", line 68, in view return self.dispatch(request, *args, **kwargs) File "D:\Rep-master\baker\views.py", line 79, in dispatch Register.save(reg1.username, reg1.email, reg1.password) File "C:\Users\Егор\Desktop\папка для всего\Python\lib\site-packages\django\db\models\base.py", line 653, in save for field in self._meta.concrete_fields: AttributeError: 'str' object has no attribute '_meta'

models.py

from django.db import models
from datetime import datetime

class Register(models.Model):
    username = models.CharField(max_length=64)
    email = models.EmailField(max_length=64)
    # logo = models.ImageField(blank=True, upload_to='media')
    password = models.CharField(max_length=64)
    password2 = models.CharField(max_length=64)

    def __str__(self):
        return self.username

views.py

from django.views.generic import TemplateView
from django.contrib.auth import authenticate, login    
from rest_framework.views import APIView    
from .models import Food, Register

class RegisterView(TemplateView):    
    template_name = "../templates/register.html"

    def dispatch(self, request, *args, **kwargs):
        context = {}
        reg1 = Register.objects.all()
        if request.method == 'POST':
            reg1.username = request.POST.get('username')
            reg1.email = request.POST.get('email')
            reg1.password = request.POST.get('password')
            reg1.password2 = request.POST.get('password2')
            if reg1.password == reg1.password2:
                print('if')
                Register.save(reg1.username, reg1.email, reg1.password)
                return redirect(reverse("login"))
            else:
                context['error'] = "Пароли на совпадают"

        return render(request, self.template_name)

urls.py (главный)

from django.contrib import admin    
from django.conf.urls import url, include    
from django.urls import path

urlpatterns = [
    url('admin/', admin.site.urls),
    path('api/', include('baker.urls')),
]

urls.py

from django.urls import path    
from django.conf.urls import url    
from . import views    
from .views import LoginView, RegisterView    
from .views import FoodView
app_name = "baker"

urlpatterns = [

    path('food/', FoodView.as_view()),
    path('food/<int:pk>', FoodView.as_view()),
    url(r'^$',  views.index, name="index"),
    url(r'^add_food/', views.addfood, name="add_food"),
    # url(r'^register/', views.register, name="register"),
    # url(r'^login/', views.login, name="login"),
    url(r'^login/$', LoginView.as_view(), name="login"),
    url(r'^register/$', RegisterView.as_view(), name="register"),
]

register.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>Регистрация</h1>
    <form method="post">
        {% csrf_token %}
        Имя пользователя: <input type="text" name="username"><br>
        Email: <input type="email" name="email"><br>
        Пароль: <input type="password" name="password"><br>
        Пароль еще раз: <input type="password" name="password2"><br>

        <input type="submit" value="Регистрация">
    </form>
</body>
</html>

Буду рад если кто-то поможет. Заранее спасибо.


Ответы (1 шт):

Автор решения: m0nte-cr1st0
    def dispatch(self, request, *args, **kwargs):
        context = {}
        reg1 = Register.objects.all()
        if request.method == 'POST':
            reg1.username = request.POST.get('username')
            reg1.email = request.POST.get('email')
            reg1.password = request.POST.get('password')
            reg1.password2 = request.POST.get('password2')
            if reg1.password == reg1.password2:
                print('if')
                Register.save(reg1.username, reg1.email, reg1.password)
                return redirect(reverse("login"))
            else:
                context['error'] = "Пароли на совпадают"

        return render(request, self.template_name)

Перепишите на

    def dispatch(self, request, *args, **kwargs):
        context = {}
        if request.method == 'POST':
            username = request.POST.get('username')
            email = request.POST.get('email')
            password = request.POST.get('password')
            password2 = request.POST.get('password2')
            if password == password2:
                print('if')
                Register.save(username, email, password, password2)
                return redirect(reverse("login"))
            else:
                context['error'] = "Пароли на совпадают"

        return render(request, self.template_name)
→ Ссылка