Я пишу классное представление, которое позволяет сотрудникам настраивать свой профиль. Поскольку модель сотрудника имеет несколько полей внешнего ключа (например, работодатель является ключевой моделью, использующей ключевую ссылку для компании), я решил не использовать ModelForm и использовать старые добрые формы, чтобы пользователь мог ввести имя компании, в которой они работают, а не 32 .Django: __init __() получил неожиданный аргумент ключевого слова 'first_name'
Вот мой код:
class Employee_ProfileSetting(forms.Form):
first_name = forms.CharField(label = 'First Name', max_length = 30)
last_name = forms.CharField(label = 'Last Name', max_length = 30)
email = forms.EmailField()
employer = forms.CharField(max_length = 50)
cell = forms.CharField(max_length = 20)
driver_license_num = forms.CharField(max_length=20)
birth_year = forms.IntegerField()
start_date = forms.IntegerField(help_text = 'Year you started with the company')
title = forms.CharField(max_length = 30)
def __init__(self, *args, **kwargs):
if not args: # args is empty, meaning a fresh object
super(Employee_ProfileSetting, self).__init__(*args, **kwargs)
else:
# Retrieving the form's information
self.first_name = args[0].get('first_name')
self.last_name = args[0]['last_name']
self.email = args[0]['email']
self.cell = args[0]['cell']
self.driver_license_num = args[0]['driver_license_num']
self.birth_year = args[0]['birth_year']
self.start_year = args[0]['start_date']
self.title = args[0]['title']
super(Employee_ProfileSetting, self).__init__(*args, **kwargs)
конструктор затем позволит мне сделать это в моем классе на основе зрения:
# Inside class AdminSetting(View):
def post(self, request):
form = self.form_class(request.POST)
if form.is_valid():
cd = form.cleaned_data
employee_profile = Employee_ProfileSetting(**cd) # Calling the constructor
employee_profile.save() # The save function is overridden
admin, created = Employee.objects.get_or_create(**cd) # If a matching employee exists, it gets that object. Otherwise, it creates it.
if created: # Object was not found, and so it was created
return HttpResponseRedirect('success.html')
Когда я запускаю его, он дает мне ошибку :
__init __() получил неожиданный аргумент ключевое слово 'first_name'
Итак, моя проблема заключается в два раза:
1) Что не так с кодом? и что означает эта ошибка?
2) Есть ли лучший способ позволить пользователю заполнить все поля, включая поля внешнего ключа, в форме и сохранить поля соответственно? например поле, соответствующее внешнему ключу, сначала сохраняется в своей соответствующей таблице (company1.employee_set.create(), а затем сохраняет другие поля. Может ли использоваться ModelForm?
Пожалуйста, покажите вашу модель 'Employee', показать полный' AdminSetting' вида и формы, что вы предоставили в form_class этой точки зрения , Также покажите свой метод save из формы Employee_ProfileSetting. – GwynBleidD