Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.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 - Fatal编程技术网

Python 如何更新名、姓和;Django模型用户的电子邮件,并更新单独模型中的其他字段

Python 如何更新名、姓和;Django模型用户的电子邮件,并更新单独模型中的其他字段,python,django,Python,Django,几周来,我一直在使用YT、StackOverflow、Django文档和其他来源学习Django教程。所以,也许我的问题不合情理。我希望你能理解我的问题。如果我的代码有任何错误或者你想给我一些建议,请回复我 我在计算机上本地创建站点。首先,我使用创建了一个注册页面和登录页面 Django模型 用户登录网站后,在个人资料设置中,我创建了一些表单字段,如名字,姓氏,电子邮件,手机号码,出生日期,邮政编码,地址,网站,生物,等 我有models.py用于帐户设置 from django.db impo

几周来,我一直在使用YT、StackOverflow、Django文档和其他来源学习Django教程。所以,也许我的问题不合情理。我希望你能理解我的问题。如果我的代码有任何错误或者你想给我一些建议,请回复我

我在计算机上本地创建站点。首先,我使用创建了一个注册页面和登录页面 Django模型

用户登录网站后,在个人资料设置中,我创建了一些表单字段,如名字姓氏电子邮件手机号码出生日期邮政编码地址网站生物

我有models.py用于帐户设置

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

# Create your models here.

class Account(models.Model):
    user = models.ForeignKey(User, null=True, on_delete=models.SET_NULL)
    profile_photo = models.ImageField(upload_to='profile', null=True)
    mobile_number = models.PositiveBigIntegerField(null=True)
    date_of_birth = models.DateField(auto_now_add=False, auto_now=False, null= True)
    zip_code = models.IntegerField(null=True)
    address = models.CharField(max_length=225, null=True)
    website = models.URLField(max_length=100, null=True)
    bio = models.CharField(max_length=225, null=True)
表单中.py

from django import forms
from .models import Account

class AccountForm(forms.ModelForm):
    class Meta:
        model = Account
        fields = '__all__'
模板中

<form class="form mx-auto my-5" method="POST" action="" enctype="multipart/form-data">
    <input name="user" type="hidden" value="{{request.user.id}}" required>
    <div class="form-row">
      <div class="col form-group">
        <label for="first_name" class="font-weight-bold">First name (required):</label>
        <input name="first_name" type="text" id="first_name" class="form-control" placeholder="First name" value="{% if request.user.first_name %}{{request.user.first_name}}{% endif %}" required>
      </div>
      <!-- <div class="col form-group">
        <label for="middle_name">Middle name (optional):</label>
        <input name="middle_name" type="text" id="middle_name" class="form-control" placeholder="Middle name">
      </div> -->
      <div class="col form-group">
        <label for="last_name">Last name (optional):</label>
        <input name="last_name" type="text" id="last_name" class="form-control" placeholder="Last name" value="{% if request.user.last_name %}{{request.user.last_name}}{% endif %}">
      </div>
    </div>
    <div class="form-group">
      <label for="email" class="font-weight-bold">Email address:</label>
      <input name="email" type="email" id="email" class="form-control" value="{{request.user.email}}" placeholder="Your email" required>
    </div>
    <div class="form-row">
      <div class="col form-group">
        <label for="mobile_number" class="font-weight-bold">Mobile number:</label>
        <input name="mobile_number" type="tel" id="mobile_number" class="form-control" placeholder="98********" required>
      </div>
      <div class="col form-group">
        <label for="date_of_birth" class="font-weight-bold">Date of birth:</label>
        <input name="date_of_birth" type="date" id="date_of_birth" class="form-control" required>
      </div>
      <div class="col form-group">
        <label for="zip_code" class="font-weight-bold">Zip code:</label>
        <input class="form-control" id="zip_code" name="zip_code" type="number" min="00000" max="99999" placeholder="55455">
      </div>
    </div>
    <div class="form-row">
      <div class="col form-group">
        <label for="address">Address:</label>
        <input name="address" type="text" id="address" class="form-control" placeholder="Bharatpur-07, Chitwan, Nepal">
      </div>
    </div>
    <div class="form-row">
      <div class="col form-group">
        <label for="website">Website:</label>
        <input name="website" type="url" id="website" class="form-control" placeholder="https://example.com/">
      </div>
    </div>
    <div class="form-row">
      <div class="col form-group">
        <label for="bio">Bio:</label>
        <textarea name="bio" class="form-control" id="bio" rows="5"></textarea>   
      </div>
      <div class="col form-group">
        <br><br>
        <span>Write something about your</span>
      </div>
    </div>
  <button class="btn btn-primary btn-md px-3 my-0 mr-0 float-right" type="submit">Submit</button
</form>
但是,我想在保存前验证名、姓、电子邮件字段的有效性。我希望保存一些是有效的()

而且,我尝试了一些新的东西

现在,在views.py中,我添加了

from pages.forms import CreateUserForm
它是为注册页面创建的

然后,views.py如下所示:

from django.shortcuts import render, redirect
from .forms import AccountForm

from pages.forms import CreateUserForm

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

# Create your views here.
def profileSettingsPage(request, pid):
    form1 = AccountForm()
    form2 = CreateUserForm()
    if request.method == 'POST':
        form1 = AccountForm(request.POST, request.FILES)
        form2 = CreateUserForm(request.POST)
        if int(request.POST.get('user')) == request.user.id:
            if form1.is_valid() and form2.is_valid():
                form2.save()
                form1.save()

                messages.success(request, 'Profile saved.')
                return redirect('profile-settings', pid)
            else:
                messages.warning(request, 'Faile to saved profile')
                return redirect('profile-settings', pid)
        else:
            messages.warning(request, 'Sorry! You enter other username.')
            return redirect('profile-settings', pid)
    context = {'form1':form1, 'form2':form2}
    return render(request, 'profile-settings.html', context)
但是,这不适合我form1.is\u valid()form2.is\u valid()无法传递True值并给我消息“保存配置文件失败”

我的问题是,我想更新Django模型用户的名字电子邮件字段,其他字段分别更新到下一个模型

另一个问题

在上面的models.py中,我使用ForeignKey()获取用户(用户名或id)

模板中,我使用{{request.user.id}获取用户

是否可以在不接触views.py、forms.py和模板的情况下获取用户(id或用户名)?

编辑: 我在这个链接上得到了答案:

您只需将上下文中的
用户id
传递给模板,然后使用它。

您是否检查了您的{{request.user.if}是否返回了任何id?因为您尚未在模板的上下文中传递请求变量。此外,如果您只想更新模型,则可以在创建其对象时将user的实例传递给user_表单。这样,您甚至不需要将用户的id传递给模板。是的,{request.user.id}给我id。但是在views.py中,我检查了request.POST.get('user')==request.user.id,尽管值相同,但返回False。然后,我找到了一个地方,将id转换为int。然后我检查了int(request.POST.get('user')==request.user.id)。终于成功了。但是我的问题是,在models.py中是否存在类似user=request.user.id而不是foreignkey的任何可能的方法对于更新模型,@BATMAN您能给出一个传递实例的示例代码吗。因为它尝试了很多次,或者我在某个地方出错了,它只更新了AccountForm only not django Users您是否解决了更新问题以及您要查找的id?是的,您是对的,但我很想知道,有没有办法通过从某个地方传递id来获取models.py中的用户id或用户名?示例user=request.user.id或request.user.username,以便我可以替换ForeignKey。感谢您的回复!但It get me error DoesNotExist帐户匹配查询不存在。我认为line instance\u account=account.objects.get(user=instance\u user)给出了错误。我如何解决这个问题?user=models.OneToOneField(user,on_delete=models.SET_NULL)我解决了这个问题,但是如果form1.is_valid()和form2.is_valid():我如何联系您以便获得帮助?共享您的Whatsap联系人我在另一个链接上获得了解决方案。谢谢,你帮了我很多。
class Account(models.Model):
    user = models.OneToOneField(User, null=True, on_delete=models.SET_NULL)
    profile_photo = models.ImageField(upload_to='profile', null=True)
    mobile_number = models.PositiveBigIntegerField(null=True)
    date_of_birth = models.DateField(auto_now_add=False, auto_now=False, null= 
    True)
    zip_code = models.IntegerField(null=True)
    address = models.CharField(max_length=225, null=True)
    website = models.URLField(max_length=100, null=True)
    bio = models.CharField(max_length=225, null=True)

def profileSettingsPage(request):
    form1 = AccountForm()
    form2 = CreateUserForm()
    if request.method == 'POST':
        instance_user = User.objects.get(pk=request.user.id)
        instance_account = Account.objects.get(user=instance_user)
        form1 = AccountForm(request.POST, request.FILES,instance=instance_account)
        form2 = CreateUserForm(request.POST,instance=instance_user)

        if form1.is_valid() and form2.is_valid():
            form2.save()
            form1.save()
            messages.success(request, 'Profile saved.')
            return redirect('profile-settings')
        else:
            print(form1.errors)
            print(form2.errors)
            messages.warning(request, 'Faile to saved profile')
            return redirect('profile-settings')
    context = {'form1':form1, 'form2':form2}
    return render(request, 'profile-settings.html', context)
class Account(models.Model):
    user = models.OneToOneField(User, null=True, on_delete=models.SET_NULL)
    profile_photo = models.ImageField(upload_to='profile', null=True)
    mobile_number = models.PositiveBigIntegerField(null=True)
    date_of_birth = models.DateField(auto_now_add=False, auto_now=False, null= 
    True)
    zip_code = models.IntegerField(null=True)
    address = models.CharField(max_length=225, null=True)
    website = models.URLField(max_length=100, null=True)
    bio = models.CharField(max_length=225, null=True)

def profileSettingsPage(request):
    form1 = AccountForm()
    form2 = CreateUserForm()
    if request.method == 'POST':
        instance_user = User.objects.get(pk=request.user.id)
        instance_account = Account.objects.get(user=instance_user)
        form1 = AccountForm(request.POST, request.FILES,instance=instance_account)
        form2 = CreateUserForm(request.POST,instance=instance_user)

        if form1.is_valid() and form2.is_valid():
            form2.save()
            form1.save()
            messages.success(request, 'Profile saved.')
            return redirect('profile-settings')
        else:
            print(form1.errors)
            print(form2.errors)
            messages.warning(request, 'Faile to saved profile')
            return redirect('profile-settings')
    context = {'form1':form1, 'form2':form2}
    return render(request, 'profile-settings.html', context)