[英]correct using get_or_create?
对于我的代码,它记录表单中的联系人并将其添加到数据库中,需要添加 get_or_create,或编写另一个条件(如果有这样的电话的联系人 - 更新,否 - 添加),但我做第一次,拜托,我很高兴阅读我的问题的解决方案和简要说明♡
视图.py
from django.http import HttpResponse
from django.shortcuts import render,redirect
from django.contrib import messages
from .forms import Forms
def main(request):
form = Forms
if request.method == "POST":
form = Forms(request.POST)
if form.is_valid():
form.save()
messages.success(request, 'Form has been submitted')
return redirect('/')
return render(request, 'app/main.html', { 'form':form } )
forms.py
from django.forms import ModelForm
from .models import Form
class Forms(ModelForm):
class Meta:
model = Form
fields = '__all__'
网址.py
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('app.urls'))
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
模型.py
from django.db import models
class Form(models.Model):
name = models.CharField(max_length=30)
phone = models.CharField(max_length=30)
管理员.py
from django.contrib import admin
from .models import Form
'''from django.contrib.admin.models import LogEntry
LogEntry.objects.all().delete()'''
'''for delete actions in admin_panel'''
admin.site.register(Form)
应用程序.py
from django.apps import AppConfig
class AppConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'app'
main.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTE-8">
<meta name="viewport" content="width, initial-scale=1.0">
<title>CHECK DATA</title>
</head>
<body>
{% for message in messages %}
<p>{{message}}</p>
{% endfor %}
<form action="" method="post">
{% csrf_token %}
<table>
{{form.as_table}}
<tr>
<td colspan="2">
<input type="submit"/>
</td>
</tr>
</table>
</form>
</body>
</html>
您可以通过以下方式实现:
def main(request):
if request.method == "POST":
form = Forms(request.POST)
if form.is_valid():
Form.objects.get_or_create(
phone=form.cleaned_data['phone'],
defaults={'name': form.cleaned_data['name']}
)
messages.success(request, 'Form has been submitted')
return redirect('/')
else:
form = Forms()
return render(request, 'app/main.html', { 'form': form })
但是,您必须小心,因为这意味着用户可能会编辑另一个用户的数据。 因此,也许值得检查(登录的)用户是否有权更新该项目。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.