当前位置: 首页 > 知识库问答 >
问题:

django中的扩展用户模型不保存配置文件图像

袁弘化
2023-03-14

我试图创建一个在姜戈的聊天论坛。但要做到这一点,我需要扩展用户模型,但扩展后,配置文件图像不保存这是我的模型

class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
email = models.EmailField()
img = models.FileField(upload_to='media/', blank=True, null=True)

def __str__(self):
    return self.user.username
@receiver(post_save, sender=User)
def update_user_profile(sender, instance, created, **kwargs):
if created:
    Profile.objects.create(user=instance)
instance.profile.save()

我的观点:

def signup(request):
if request.method == 'POST':
    form = SignUpForm(request.POST)
    if form.is_valid():
        user = form.save()
        user.refresh_from_db()  # load the profile instance created by the signal
        user.profile.email = form.cleaned_data.get('email')
        user.profile.img = form.cleaned_data.get('img')
        user.save()
        raw_password = form.cleaned_data.get('password1')
        user = authenticate(username=user.username, password=raw_password)
        login(request, user)
        return redirect('home')
else:
    form = SignUpForm()
return render(request, 'tforum/signup.html', {'form': form})

我的表单.py

class SignUpForm(UserCreationForm):
email = forms.EmailField(help_text='Required.')
img = forms.FileField(help_text='Upload Image')
class Meta:
    model = User
    fields = ('username', 'email', 'img', 'password1', 'password2', )

signup.html

 <form method="post" enctype="multipart/form-data">
{% csrf_token %}
{% for field in form %}
  <p>
    {{ field.label_tag }}<br>
    {{ field }}
    {% if field.help_text %}
      <small style="color: grey">{{ field.help_text }}</small>
    {% endif %}
    {% for error in field.errors %}
      <p style="color: red">{{ error }}</p>
    {% endfor %}
  </p>
{% endfor %}
<button type="submit">Sign up</button>

null

设置.py

STATIC_URL=“/static/”

MEDIA_URL='/media/'MEDIA_ROOT=os.path.join(BASE_DIR,'media')

问题是没有创建用户。如果我从用户保存的代码中删除img。

我已经去掉了大部分的造型

共有1个答案

郗学
2023-03-14

您应该创建profileForm

class ProfileForm(forms.ModelForm):
    class Meta:
        model = Profile
        fields = ('email', 'img')

并更新您的signup.py

    def update_signup(request):
      if request.method == 'POST':
        form = SignUpForm(request.POST)
        profile_form = ProfileForm(request.POST, instance=request.user.profile)
        if form.is_valid() and profile_form.is_valid():
            user = form.save()
            user.refresh_from_db()  # load the profile instance created by the signal
            user.profile.email = form.cleaned_data.get('email')
            user.profile.img = form.cleaned_data.get('img')
            profile_form.save()
            user.save()
            raw_password = form.cleaned_data.get('password1')
            user = authenticate(username=user.username, password=raw_password)
            login(request, user)
            return redirect('home')
    else:
        form = SignUpForm()
    return render(request, 'tforum/signup.html', {'form': form})
 类似资料:
  • 本文向大家介绍Django 扩展用户配置文件示例,包括了Django 扩展用户配置文件示例的使用技巧和注意事项,需要的朋友参考一下 示例 本示例是摘自Proto扩展Django用户配置文件的摘录            

  • 问题内容: 我在Django中有一个扩展的UserProfile模型: 还有一个signal.py: 我通过在我的:中确保信号被注册: 因此,应该为每个注册用户创建一个新的UserProfile,对吗?但事实并非如此。尝试登录时,总是出现“ UserProfile匹配查询不存在”错误,这意味着该数据库条目不存在。 我应该说我使用django-registration,它提供了user_regist

  • 问题内容: 我在一个名为如下的应用程序中有一个模型: 在我的设置中: 但是,如果我尝试: 我收到以下错误: 我在这里想念什么? 任何帮助将非常感激。 问题答案: 嗯,您正在尝试获取UserProfile的用户个人资料。我希望您的意思是得到一个用户,然后再打电话。

  • 问题内容: 我有一个带有created_by字段的模型,该模型链接到标准Django用户模型。保存模型时,我需要使用当前用户的ID自动填充它。我无法在Admin层执行此操作,因为该网站的大部分内容都不会使用内置的Admin。谁能建议我该怎么做? 问题答案: 如果你希望某些东西在管理员和其他地方都可以使用,则应使用自定义模型形式。基本思想是重写该__init__方法以采用一个额外的参数-reques

  • 问题内容: 用自定义字段扩展User模型(与Django的身份验证应用程序捆绑在一起)的最佳方法是什么?我也可能希望使用电子邮件作为用户名(用于身份验证)。 问题答案: 做到这一点确实是Django推荐的方法是通过属性。 扩展现有的用户模型 … 如果你希望存储与相关的信息,则可以对包含其他信息字段的模型使用一对一关系。这种一对一模型通常称为配置文件模型,因为它可能存储有关站点用户的与身份验证无关的

  • 问题内容: 我想通过models.py方法获取当前登录的用户。我想检查用户的角色,并查看它是否可以根据其角色执行某些操作。 models.py: 在这里,该模型被用作内联模型。我想检查当前登录用户的角色,并根据用户角色更新另一个模型。在这里,我需要检查当前用户的角色。我没有使用任何形式或模板,而是完全利用了。是否有任何方法可以进入该方法或检查并更新中另一个模型中的值? 问题答案: 你可以从另一个角