Нужна помощь TypeError at /register/
Нужна помощь в решении этой ошибки. Я не знаю, что я делаю неправильно в этом коде python. Любой отзыв будет полезен
TypeError at /register/
Получили TypeError при вызове User.objects.create(). Это может быть связано с тем, что в классе сериализатора есть поле, доступное для записи, которое не является допустимым аргументом для User.objects.create(). Возможно, вам нужно сделать поле доступным только для чтения или переопределить метод RegisterSerializer.create(), чтобы правильно обработать это.
Оригинальное исключение:
Traceback (последний последний вызов):
File "/Users/bishnukandel/Desktop/ISQA8380/lab4part3/venv/lib/python3.7/site-packages/rest_framework/serializers.py", line 917, in create
instance = ModelClass.objects.create(**validated_data)
Файл "/Users/bishnukandel/Desktop/ISQA8380/lab4part3/venv/lib/python3.7/site-packages/django/db/models/manager.py", строка 82, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
Файл "/Users/bishnukandel/Desktop/ISQA8380/lab4part3/venv/lib/python3.7/site-packages/django/db/models/query.py", строка 411, in create
obj = self.model(**kwargs)
File "/Users/bishnukandel/Desktop/ISQA8380/lab4part3/venv/lib/python3.7/site-packages/django/db/models/base.py", line 484, in init
raise TypeError("'%s' is an invalid keyword argument for this function" % kwarg)
TypeError: 'password2' является недопустимым аргументом ключевого слова для этой функции
view.py
serializers.py
from rest_framework import serializers
from .models import Customer, Investment, Stock,User
from django.contrib.auth.password_validation import validate_password
from rest_framework import serializers
from rest_framework.validators import UniqueValidator
class CustomerSerializer(serializers.ModelSerializer):
class Meta:
model = Customer
fields = ('pk','name', 'address','cust_number' , 'city', 'state', 'zipcode', 'email', 'cell_phone')
class InvestmentSerializer(serializers.ModelSerializer):
class Meta:
model = Investment
fields = ('pk','customer', 'category', 'description', 'acquired_value', 'acquired_date', 'recent_value', 'recent_date')
class StockSerializer(serializers.ModelSerializer):
class Meta:
model = Stock
fields = ('pk','customer', 'cust_number', 'symbol', 'name', 'shares', 'purchase_price', 'purchase_date')
class RegisterSerializer(serializers.ModelSerializer):
email = serializers.EmailField(
required=True,
validators=[UniqueValidator(queryset=User.objects.all())]
)
password = serializers.CharField(write_only=True, required=True, style={'input_type': 'password'},
validators=[validate_password])
password2 = serializers.CharField(write_only=True, style={'input_type': 'password'}, required=True)
class Meta:
model =User
fields = ('username', 'password', 'password2', 'email', 'first_name', 'last_name')
extra_kwargs = {
'first_name': {'required': True},
'last_name': {'required': True},
'password': {'write_only': True, 'min_length': 6},
'password2': {'write_only': True, 'min_length': 6}
}
def validate(self, attrs):
if attrs['password'] != attrs['password2']:
raise serializers.ValidationError({"password": "Password fields didn't match."})
return attrs
def create(self, validated_data):
user = User.objects.create(
username=validated_data['username'],
email=validated_data['email'],
first_name=validated_data['first_name'],
last_name=validated_data['last_name']
)
user.set_password(validated_data['password'])
user.save()
return user
model.py
admin.py
from django.contrib import admin
from .models import Customer, Investment, Stock
class CustomerList(admin.ModelAdmin):
list_display = ('cust_number', 'name', 'city', 'cell_phone')
list_filter = ('cust_number', 'name', 'city')
search_fields = ('cust_number', 'name')
ordering = ['cust_number']
class InvestmentList(admin.ModelAdmin)
list_display = ('customer', 'category', 'description', 'recent_value')
list_filter = ('customer', 'category')
search_fields = ('customer', 'category')
ordering = ['customer']
class StockList(admin.ModelAdmin):
list_display = ('customer','symbol', 'name', 'shares', 'purchase_price')
list_filter = ('customer','symbol', 'name')
search_fields = ('customer','symbol', 'name')
ordering = ['customer']
admin.site.register(Customer, CustomerList)
admin.site.register(Investment, InvestmentList)
admin.site.register(Stock, StockList)
urls.py
from django.contrib import admin
from django.urls import path
from django.conf.urls import url
from rest_framework_jwt.views import obtain_jwt_token
from portfolio import views
urlpatterns = [
path('admin/', admin.site.urls),
path('auth/', obtain_jwt_token),
path('', views.customer_list),
url(r'^api/customers/$', views.customer_list),
url(r'^api/customers/(?P<pk>[0-9]+)$', views.getCustomer),
path('investments/', views.investment_list),
url(r'^api/investments/$', views.investment_list),
url(r'^api/investments/(?P<pk>[0-9]+)$', views.getInvestment),
path('stocks/', views.stock_list),
url(r'^api/stocks/$', views.stock_list),
url(r'^api/stocks/(?P<pk>[0-9]+)$', views.getStock),
path('register/', views.RegisterView.as_view(), name='auth_register'),
]