Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django-为所有现有用户创建配置文件_Python_Django_Backend_Django Users_Django 3.0 - Fatal编程技术网

Python Django-为所有现有用户创建配置文件

Python Django-为所有现有用户创建配置文件,python,django,backend,django-users,django-3.0,Python,Django,Backend,Django Users,Django 3.0,我使用的是Django3,这是我的用户配置文件模型 from django.db import models from django.contrib.auth.models import User from datetime import datetime from django.db.models.signals import post_save from django.utils.text import slugify from django.db.models import signal

我使用的是Django3,这是我的用户配置文件模型

from django.db import models
from django.contrib.auth.models import User
from datetime import datetime
from django.db.models.signals import post_save
from django.utils.text import slugify 
from django.db.models import signals

# Create your models here.

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    bio = models.TextField(max_length=1000,blank=True)
    created_at = models.DateTimeField(default=datetime.now())
    slug = models.SlugField(blank=True)
    img = models.ImageField(upload_to='userimg/',default='userimg/avatar.png')

    def __str__(self):
        return "%s" % self.user

    def save(self, *args, **kwargs):
        self.slug = slugify(self.user)
        super(Profile, self).save(*args, **kwargs)

def create_user_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.get(user=instance)

post_save.connect(create_user_profile, sender=User)

def delete_user(sender, instance=None, **kwargs):
    try:
        instance.user
    except User.DoesNotExist:
        pass
    else:
        instance.user.delete()

signals.post_delete.connect(delete_user, sender=Profile)
问题是函数create_user_profile仅为新用户创建配置文件,而不为旧用户创建配置文件,因此如何解决此问题?

您可以创建一个配置文件。您可以通过以下方式创建一个:

python3 manage.py makemigrations --empty app_name
注意:通常最好使用来引用用户模型,而不是直接使用。有关更多信息,请参见


你可以制作编辑配置文件表单,让用户为老用户手动添加。我认为唯一的解决方案是我正在寻找一种自动方式,我不想这样做manually@Ninou:嗯,使用信号首先有点反模式:@Ninou:no,如前所述,这是一个迁移文件。运行
makemigrations
后,它会将
配置文件添加到缺少配置文件的
用户中。这个“适合”模型吗?我按照你说的做了,但是当我进行py manage.py迁移时,它显示了一个错误“LookupError:没有安装标签为'django.contrib.auth'的应用程序。”我不知道为什么,因为我安装了'django.contrib.auth'_APPS@Ninou:如果您使用
AUTH\u USER\u MODEL
设置,该怎么办?您的意思是什么?@Ninou:如果您使用
USER=apps.get\u MODEL(settings.AUTH\u USER\u MODEL)
该怎么办?
from django.db import migrations
from django.conf import settings

def make_profiles(apps, schema_editor):
    User = apps.get_model(settings.AUTH_USER_MODEL)
    Profile = apps.get_model('app_name', 'Profile')
    profiles = [Profile(user=user) for user in User.objects.filter(profile=None)]
    Profile.objects.bulk_create(profiles)

class Migration(migrations.Migration):

    dependencies = [
        ('app_name', '1234_some_migration'),
    ]

    operations = [
        migrations.RunPython(make_profiles),
    ]