意外的关键字参数
Unexpected keyword argument
这是我的模型
型号
from Account.models import User
from django.db import models
class Seller(models.Model):
seller = models.OneToOneField(User, on_delete = models.CASCADE)
email = models.EmailField(max_length = 90, unique = True)
country = models.CharField(max_length = 60)
phone = models.CharField(max_length= 20, unique = True, blank = True, null = True)
address = models.TextField()
zipcode = models.CharField(max_length = 10)
形式
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.db import transaction
from .models import Seller
from Account.models import User
class SellerCreationForm(UserCreationForm):
name = forms.CharField(required = True)
email = forms.EmailField(required = True)
phone = forms.CharField(required = False)
country = forms.CharField(required = True)
address = forms.CharField(required = True)
zipcode = forms.CharField(required = True)
class Meta(UserCreationForm.Meta):
model = User
@transaction.atomic
def save(self):
user = super().save(commit=False)
user.is_seller = True
user.name = self.cleaned_data.get('name')
user.save()
seller = Seller.objects.create(user=user)
seller.email = self.cleaned_data.get('email')
seller.phone = self.cleaned_data.get('phone')
seller.country = self.cleaned_data.get('country')
seller.address = self.cleaned_data.get('address')
seller.zipcode = self.cleaned_data.get('zipcode')
seller.save()
return user
观看次数
from django.shortcuts import render, redirect
from django.views.generic import CreateView
from .forms import SellerCreationForm
from django.contrib.auth.forms import AuthenticationForm
from Account.models import User
class RegisterSeller(CreateView):
model = User
form_class = SellerCreationForm
template_name = 'registration/registerseller.html'
def form_valid(self, form):
user = form.save()
login(self.request, user)
return redirect('/')
我尝试创建一个具有多种用户类型且所有用户具有不同功能的项目。
代码中的一切都运行良好,但每当我尝试注册新用户时,我都会收到错误消息。
它说 Seller() 得到了一个意外的关键字参数 'user'
从Seller
到User
的ForeignKey
已经命名为seller
,而不是seller
`。因此,您可以构造一个对象:
seller = Seller.objects.create(
<strong>seller=user</strong>,
email=self.cleaned_data['email']
phone = self.cleaned_data['phone']
country = cleaned_data['country']
address = self.cleaned_data['address']
zipcode = self.cleaned_data['zipcode']
)
但也许最好将字段重命名为:
from Account.models import User
from django.db import models
class Seller(models.Model):
<strong>user</strong> = models.OneToOneField(User, on_delete = models.CASCADE)
# ⋮
Note: It is normally better to make use of the settings.AUTH_USER_MODEL
[Django-doc] to refer to the user model, than to use the User
model [Django-doc] directly. For more information you can see the referencing the User
model section of the documentation.
这是我的模型 型号
from Account.models import User
from django.db import models
class Seller(models.Model):
seller = models.OneToOneField(User, on_delete = models.CASCADE)
email = models.EmailField(max_length = 90, unique = True)
country = models.CharField(max_length = 60)
phone = models.CharField(max_length= 20, unique = True, blank = True, null = True)
address = models.TextField()
zipcode = models.CharField(max_length = 10)
形式
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.db import transaction
from .models import Seller
from Account.models import User
class SellerCreationForm(UserCreationForm):
name = forms.CharField(required = True)
email = forms.EmailField(required = True)
phone = forms.CharField(required = False)
country = forms.CharField(required = True)
address = forms.CharField(required = True)
zipcode = forms.CharField(required = True)
class Meta(UserCreationForm.Meta):
model = User
@transaction.atomic
def save(self):
user = super().save(commit=False)
user.is_seller = True
user.name = self.cleaned_data.get('name')
user.save()
seller = Seller.objects.create(user=user)
seller.email = self.cleaned_data.get('email')
seller.phone = self.cleaned_data.get('phone')
seller.country = self.cleaned_data.get('country')
seller.address = self.cleaned_data.get('address')
seller.zipcode = self.cleaned_data.get('zipcode')
seller.save()
return user
观看次数
from django.shortcuts import render, redirect
from django.views.generic import CreateView
from .forms import SellerCreationForm
from django.contrib.auth.forms import AuthenticationForm
from Account.models import User
class RegisterSeller(CreateView):
model = User
form_class = SellerCreationForm
template_name = 'registration/registerseller.html'
def form_valid(self, form):
user = form.save()
login(self.request, user)
return redirect('/')
我尝试创建一个具有多种用户类型且所有用户具有不同功能的项目。 代码中的一切都运行良好,但每当我尝试注册新用户时,我都会收到错误消息。 它说 Seller() 得到了一个意外的关键字参数 'user'
从Seller
到User
的ForeignKey
已经命名为seller
,而不是 `。因此,您可以构造一个对象:seller
seller = Seller.objects.create(
<strong>seller=user</strong>,
email=self.cleaned_data['email']
phone = self.cleaned_data['phone']
country = cleaned_data['country']
address = self.cleaned_data['address']
zipcode = self.cleaned_data['zipcode']
)
但也许最好将字段重命名为:
from Account.models import User
from django.db import models
class Seller(models.Model):
<strong>user</strong> = models.OneToOneField(User, on_delete = models.CASCADE)
# ⋮
Note: It is normally better to make use of the
settings.AUTH_USER_MODEL
[Django-doc] to refer to the user model, than to use theUser
model [Django-doc] directly. For more information you can see the referencing theUser
model section of the documentation.