Неожиданный аргумент ключевого слова

#python #django #django-models #django-views #django-forms

Вопрос:

Вот моя модель Модель

 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('/')
 

Я попытался создать проект с несколькими типами пользователей, и все пользователи имеют разную функциональность.
Все в коде работает хорошо, но всякий раз, когда я пытаюсь зарегистрировать нового пользователя, я получаю ошибку. И там написано, что продавец() получил неожиданный аргумент ключевого слова «пользователь»

Ответ №1:

То ForeignKey , что от того Seller к User тому, было названо seller , а не seller `. Таким образом, вы можете построить объект с:

 seller = Seller.objects.create(
    seller=user,
    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):
    user = models.OneToOneField(User, on_delete = models.CASCADE)
    # ⋮ 

Примечание: Обычно лучше использовать settings.AUTH_USER_MODEL [Django-doc] для ссылки на модель пользователя, чем использовать User модель [Django-doc] напрямую. Для получения дополнительной информации вы можете ознакомиться с разделом «Ссылки на User модель» документации.