Массовый импорт пользователей в Django
Я хочу массово импортировать пользователей из xlsx
или csv
в мою исходную модель User. Я не использую AbstractUser
или AbstractBaseUser
, и мне это не нравится, потому что мой сайт работает, и я не хочу злоупотреблять моей схемой.
Я использую оригинальную модель User, в которой я добавляю пользователей (регистрация пользователей запрещена), а дополнительные поля я храню в модели Profile с помощью отношения OneToOne
.
Я не очень опытен, поэтому я пытался использовать фрагменты кода, которые я нашел, но я все еще не могу достичь своей цели. Если я пытаюсь использовать модуль import-export
в моей панели администратора, он работает с другими моделями, но не с моделью User. Tablib
или другие решения были бы также интересны для меня.
models.py (Я использую оригинальную модель User, которая посылает сигнал модели Profile при создании пользователя)
class Profile(models.Model):
def __str__(self):
return str(self.user)
user = models.OneToOneField(User, null=True, on_delete=models.CASCADE)
date = models.DateField(auto_now_add=True, auto_now=False, blank=True)
projekt = models.ForeignKey(Projekt, on_delete=models.CASCADE, default=1)
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.profile.save()
forms.py
class RegisterForm(UserCreationForm):
email = forms.EmailField()
class Meta:
model = User
fields = ['username', 'email', 'last_name', 'first_name', 'password1', 'password2']
admin.py
from django.contrib.auth.models import User
from import_export.admin import ImportExportModelAdmin
@admin.register(User)
class UserAdmin(ImportExportModelAdmin):
pass
admin.site.unregister(User)
admin.site.register(User, UserAdmin)
Я получил следующее сообщение об ошибке:
django.contrib.admin.sites.AlreadyRegistered: The model User is already registered with 'auth.UserAdmin'.
Я понимаю, что моя модель User используется, но что я могу сделать?