【问题标题】:trying to instantiate the record in a model for CRUD operations in Django getting error "update_user() missing 1 required positional argument: 'eid'尝试在 Django 中为 CRUD 操作实例化模型中的记录时出现错误“update_user() 缺少 1 个必需的位置参数:‘eid’
【发布时间】:2021-07-05 19:06:38
【问题描述】:

models.py

from django.db import models

class angelaFormModel(models.Model):
    First_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    phone = models.IntegerField()
    email = models.EmailField(max_length=50)
    confirm_email=models.EmailField(unique= True)
    password=models.CharField(max_length=50)
    confirm_password=models.CharField(max_length=50)

    def __str__(self):
        return self.First_name

forms.py

from django.forms import ModelForm
from .models import angelaFormModel
from django import forms

class angelaFormModel_form(ModelForm):

    class Meta:
        model = angelaFormModel
        widgets = {
            'password': forms.PasswordInput(),
            'confirm_password': forms.PasswordInput(),
        }
        fields = '__all__'

class angelaFormModelUpdate_form(ModelForm):

    class Meta:
        model = angelaFormModel
        widgets = {
            'password': forms.PasswordInput(),
            'confirm_password': forms.PasswordInput(),
        }
        fields = ['First_name', 'last_name', 'phone', 'password', 'confirm_password']

views.py

from django.shortcuts import render, get_object_or_404, redirect
from .forms import angelaFormModel_form, angelaFormModelUpdate_form
from .models import angelaFormModel

# working
def home(request):
    return render(request, 'home.html')

# working
def create(request):

    if request.method == 'GET':
        return render(request, 'create.html', {'form': angelaFormModel_form, 'message': 'Please, fill the form carefully...'})

    else:
        form = angelaFormModel_form(request.POST)

        if form.is_valid():
            email = form.cleaned_data.get('email')
            confirm_email = form.cleaned_data.get('confirm_email')
            password = form.cleaned_data.get('password')
            confirm_password = form.cleaned_data.get('confirm_password')

            if email != confirm_email:
                return render(request, 'create.html', {'form': angelaFormModel_form,
                                                       'message': 'Please, fill the form again! Provided email is not matching'})

            if password != confirm_password:
                return render(request, 'create.html', {'form': angelaFormModel_form,
                                                       'message': 'Please, fill the form again!, Provided password is not matching'})

            form.save()
            return render(request, 'create.html',{'form': angelaFormModel_form,
                                                  'message': 'Bingo! your form hase been submitted.'})

    # return render(request, 'create.html')
    return render(request, 'create.html', {'form': angelaFormModel_form, 'message': 'Please, fill the form again with '
                                                                                    'another email. Provided email '
                                                                                    'already exists.'})

# working
def update(request):
    return render(request, 'update.html')

# not working
def update_user(request, eid):
    obj = angelaFormModel.objects.get(email= eid)
    form = angelaFormModel_form(request.POST, instance= obj)
    if form.is_valid():
        form.save()
        return redirect("home")
    return render(request, 'update_user.html', {'form': form})

# working
def delete(request):
    return render(request, 'delete.html')

# working
def deleted(request):
    email_ID = request.POST.get('email_id')
    print(email_ID)
    angelaFormModel.objects.filter(email= email_ID).delete()
    return render(request, 'deleted.html')

#working
def retrieve(request):
    return render(request, 'retrieve.html')

# working
def retrieve_detail(request):
    emailID = request.POST.get('email_id')
    context = angelaFormModel.objects.get(email = emailID)
    return render(request, 'retrieve_detail.html', {'detail': context})

# working
def list(request):
    context = {}
    context['dataset'] = angelaFormModel.objects.all()
    return render(request, 'list.html', context) 

模板

update.html

<!DOCTYPE html>
<html lang="en">
{% load crispy_forms_tags %}
<head>
    <meta charset="UTF-8">
    <title>update</title>
</head>
<body>

<h1>update</h1>

<h3>Please, Provide the email id of the user to update the user's data.</h3>

<!--<form method="POST" action="{% url 'update_user' %}">-->
<form method="POST" action="{% url 'update_user' %}">
    {% csrf_token %}
    Email: <input type="email" name="eid">
    <button type="submit">Submit</button>
</form>

</body>
</html>

update_user.html

<!DOCTYPE html>
<html lang="en">
{% load crispy_forms_tags %}
<head>
    <meta charset="UTF-8">
    <title>update_user</title>
</head>
<body>

<h1>update_user</h1>

<form method="POST">
    {% csrf_token %}
    First Name: {{ form.First_name }}<br><br>
    Last Name: {{ form.last_name }}<br><br>
    Contact No: {{ form.phone }}<br><br>
    Password: {{ form.password }}<br><br>
    Confirm Password: {{ form.confirm_password }}<br><br>
    <button type="submit">Update</button>
</form>

</body>
</html>

错误日志:

Traceback Switch to copy-and-paste view
E:\Development3\django\maneesh2\venv\lib\site-packages\django\core\handlers\exception.py, line 47, in inner
                response = get_response(request) …
▶ Local vars
E:\Development3\django\maneesh2\venv\lib\site-packages\django\core\handlers\base.py, line 181, in _get_response
                response = wrapped_callback(request, *callback_args, **callback_kwargs) …
▶ Local vars

还请解释模型中记录实例化的概念以及如何使用它在 Django 的 crud 操作中执行 UPADET。我被困在这里,无法执行 UPDATE 操作,这非常令人沮丧,我已经尝试了所有方法并在线搜索了解决方案。请帮助我是初学者,刚刚开始学习 Django。

【问题讨论】:

    标签: python django django-views django-forms crud


    【解决方案1】:

    hym 什么是电子邮件 ID?它是电子邮件字段?如果你想这样做,它应该是:

        def update_user(request):
            if request.method == 'POST':
                eid = request.POST.get('eid','')
                try:
                    obj = angelaFormModel.objects.get(email= eid)
                except ObjectDoesNotExists:
                    return redirect("home")
                form = angelaFormModel_form(request.POST, instance= obj)
                if form.is_valid():
                    form.save()
                    return redirect("home")
                else:
                    form = angelaFormModel_form( instance= obj)
                    return render(request, 'update_user.html', {'form': form})
            else:
                print('you shouldnt be here')
                return redirect("home")
    

    所以您想在 update.html 提供电子邮件地址并在此基础上编辑 AngelaFormModel?

    这样做仍然是错误的方法...您应该将 angelaformmodel 的 id 提供为 kwarg。 在模板链接中:

    {% url 'update_user' id %}
    

    在 urls.py 中:

    path('update_user/<int:id>' views.update_user, name='update_user')
    

    在视野中:

    def update_user(request, id):
        obj = angelaFormModel.objects.get(id= id)
        if request.method == 'POST'
            form = angelaFormModel_form(request.POST, instance= obj)
             # rest
        else:
            form = angelaFormModel_form( instance= obj)
    

    【讨论】:

    • 谢谢,Waldemar。我可以创建一个实例,但表单没有得到验证...您也可以帮我解决这个问题吗...如果可能的话,请您解释一下正在发生的事情...
    • 再次感谢它现在正在工作...在我的 user_update.html 我删除了所有 {{form.field}} 值并添加了 {{ form }}...但不完全知道它是如何工作的......
    • 它的 django :) 它为你制作了大量的东西。您需要挖掘 modelForm 的文档
    猜你喜欢
    • 2015-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 2018-06-20
    • 2019-10-30
    相关资源
    最近更新 更多