首页 > 解决方案 > 如何从 UserProfile Model Admin 导入用户和 UserProfile 数据?

问题描述

我有这个自定义用户模型-

class User(AbstractUser):
    email = models.EmailField(unique=True)
    picture = models.ImageField(upload_to='profile_picture', null=True, blank=True)
    updated_on = models.DateTimeField(auto_now=True)
    date_activated = models.DateTimeField(null=True, blank=True)

    username = None
    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

    objects = UserManager()

    def __str__(self):
        return self.email

    class Meta:
        verbose_name = 'User'

而这个 UserProfile 模型-

class UserProfile(models.Model):
    user = models.OneToOneField(User, related_name='userprofile', on_delete=models.PROTECT, primary_key=True)
    contact = models.CharField(max_length=20, blank=True, default='')
    about_me = models.TextField(null=True, blank=True)
    latitude = models.FloatField(validators=[MinValueValidator(-90), MaxValueValidator(90)], null=True, blank=True)
    longitude = models.FloatField(validators=[MinValueValidator(-180), MaxValueValidator(180)], null=True, blank=True )
    age = models.IntegerField(validators=[MinValueValidator(18), MaxValueValidator(100)], null=True, blank=True  )
    dob = models.DateField(null=True, blank=True,)
    source_of_registration = models.ForeignKey('core.SourceOfRegistration', on_delete=models.PROTECT, null=True,blank=True )
    interests = models.ManyToManyField('core.Interest')
    languages = models.ManyToManyField('core.SpokenLanguage')
    gender = models.ForeignKey('core.Gender', on_delete=models.PROTECT, null=True, blank=True  )
    country = models.ForeignKey( 'core.Country', on_delete=models.PROTECT, null=True, blank=True )
    state = models.ForeignKey('core.State', on_delete=models.PROTECT, null=True, blank=True)
    city = models.ForeignKey('core.City', on_delete=models.PROTECT, null=True, blank=True)
    zip_code = models.CharField(max_length=12, null=True, blank=True)
    is_profile_completed = models.BooleanField(default=False)
    profile_completed_on = models.DateTimeField(null=True, blank=True)
    created_on = models.DateTimeField(auto_now_add=True)
    updated_on = models.DateTimeField(auto_now=True)

    class Meta:
        verbose_name = 'User Profile'

    def __str__(self):
        return self.user.email

    def clean(self):
        if self.dob:
            age_in_days = (datetime.date.today() - self.dob).days
            age_in_years = age_in_days / 365
            if age_in_years < 18:
                raise ValidationError(gettext_lazy('Age should be more or equal to 18.'))
            else:
                self.age = age_in_years

这是 UserProfileResource-

class UserProfileResource(resources.ModelResource):
    class Meta:
        model = UserProfile
        import_id_fields = (
            'user', 
            'city', 
            'state', 
            'country',
            'gender',
            'source_of_registration',
            )
        skip_unchanged = True
        report_skipped = False
        use_bulk= True
        fields = (
            'user',
            'contact',
            'about_me',
            'longitude',
            'latitude', 
            'age',
            'dob',
            'zip_code',
            'is_profile_completed',
            'created_on',
            'updated_on',
            'city',
            'state',
            'country',
            'gender',
            'source_of_registration',
            'profile_completed_on',
        )

我想从一个地方导入用户数据和用户配置文件数据,UserProfileModelAdmin,我现在完全迷路了,任何人都可以给我一个提示,如何有效地使用 django_import_export 解决这个问题。

我也看过这个解决方案,但它对我不起作用 - https://github.com/django-import-export/django-import-export/issues/319

谢谢,任何形式的提示将不胜感激。

标签: djangodjango-modelsdjango-import-export

解决方案


推荐阅读