Я пытаюсь внедрить CSV Import в Django Admin и сохранять массивные данные, соответствующие строкам файла CSV.Django Custom Admin Form bulk save implmentation
Это мой Администратор класс:
class EmployeeAdmin(admin.ModelAdmin):
list_display = ('user', 'company', 'department', 'designation', 'is_hod', 'is_director')
search_fields = ['user__email', 'user__first_name', 'user__last_name']
form = EmployeeForm
Это моя форма класс:
class EmployeeForm(forms.ModelForm):
company = forms.ModelChoiceField(queryset=Companies.objects.all())
file_to_import = forms.FileField()
class Meta:
model = Employee
fields = ("company", "file_to_import")
def save(self, commit=True, *args, **kwargs):
try:
company = self.cleaned_data['company']
records = csv.reader(self.cleaned_data['file_to_import'])
for line in records:
# Get CSV Data.
# Create new employee.
employee = CreateEmployee(...)
except Exception as e:
raise forms.ValidationError('Something went wrong.')
Мой класс Сотрудник:
class Employee(models.Model):
user = models.OneToOneField(User, primary_key=True)
company = models.ForeignKey(Companies)
department = models.ForeignKey(Departments)
mobile = models.CharField(max_length=16, default="0", blank=True)
gender = models.CharField(max_length=1, default="m", choices=GENDERS)
image = models.ImageField(upload_to=getImageUploadPath, null=True, blank=True)
designation = models.CharField(max_length=64)
is_hod = models.BooleanField(default=False)
is_director = models.BooleanField(default=False)
Когда я загрузить файл и нажмите save
, это показывает мне эту ошибку:
'NoneType' object has no attribute 'save'
с места исключения по адресу:
/usr/local/lib/python2.7/dist-packages/django/contrib/admin/options.py in save_model, line 1045
EDIT Я понимаю, мне нужно поместить вызов super.save
, но я не могу понять, куда поместить вызов, потому что doc говорит, что метод сохранения сохраняет и возвращает экземпляр. Но в моем случае нет единого экземпляра, который суперкласс может сохранять и возвращать. Кого я здесь не хватает?
TIA.
Ok. Поэтому я добавил следующее после моих для цикла: 'супер (EmployeeForm, самость) .save (* аргументов, ** kwargs)' Теперь он дает мне следующее исключение: '(1048,«Колонок " user_id 'не может быть null ")' – R4chi7
@ R4chi7 Это может быть проблема с тем, как вы создаете/используете модель 'User'. – noteness
Метод 'CreateEmployee' отлично работает, когда я запускаю его через оболочку Django. Я попытался проанализировать запросы, которые выполняются в обоих случаях. Запросы при сохранении через admin: http://pastebin.com/a8qNPd03. Запросы при сохранении через оболочку: http://pastebin.com/ipT99d5m. Некоторые дополнительные запросы выполняются в случае администратора. – R4chi7