繁体   English   中英

我想在新用户使用 Signals 注册时向用户个人资料显示默认图片,而无需从 Django 管理员手动进行

[英]I want to show the Default pic to the user profile whenever a new user is registered using Signals without doing it manually from Django admin

每当使用信号创建新用户时,我想加载用户的默认图片。 但它没有加载默认图片。 我不想从 Django 管理员手动执行此操作,我希望在应用程序中创建新用户时执行此操作。

模型.py

from django.db import models
from django.contrib.auth.models import User


class userprofile(models.Model):
    user = models.OneToOneField(User,on_delete = models.CASCADE)
    profilepic = models.ImageField(default='pp.png',upload_to='profile_pic',blank = True)

forms.py

from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
from .models import userprofile



class ProfileUpdateForm(forms.ModelForm):
    class Meta:
        model = userprofile
        fields = ['profilepic',]

视图.py


@login_required
def profile(request):    
    if request.method == 'POST':
        p_form = ProfileUpdateForm(request.POST,request.FILES,instance=request.user.userprofile)
        if p_form.is_valid():
            p_form.save()        
            return render(request,'profile.html')
    else:
        p_form = ProfileUpdateForm(instance=request.user.user)

    context = {
        'p_form': p_form        
        }

    return render(request,'profile.html',context)

简介.html

<form method ="POST" class="sm:w-1/3 text-center sm:pr-8 sm:py-8" enctype="multipart/form-data" >
            {% csrf_token %}
            <img id="profile_pic" alt="team" class="flex-shrink-0 rounded-lg w-full h-56 object-cover object-center mb-4" src="{{user.userprofile.profilepic.url}}">
            {{ p_form|crispy }}
            <br>
            <input id="file-input" style="padding: 8px 93px;" class="text-white bg-green-500 border-0 py-2 px-8 focus:outline-none hover:bg-green-700 rounded text-lg" type="submit" value="Upload">
</form>

信号间谍

from django.db.models.signals import post_save
from django.contrib.auth.models import User
from django.dispatch import receiver
from .models import userprofile


@receiver(post_save, sender=User)
def create_profile(sender, instance, created, **kwargs):
    if created:
        userprofile.objects.create(user=instance)


@receiver(post_save, sender=User)
def save_profile(sender, instance, **kwargs):
    instance.profile.save()

应用程序.py

from django.apps import AppConfig


class HomepageConfig(AppConfig):
    name = 'Homepage'


    def ready(self):
        import users.signals

首先加载表单外的图像。 然后在媒体内部和上传个人资料图片的文件夹外部添加默认图像。 在此处输入图像描述

如您所见,它位于媒体文件夹的根目录中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM