Python 3.x &引用;更新;而不是",;“保存”;在Django模型中,没有主键
如何进行“更新”而不是“保存”。我只想在“姓名”、“年龄”不存在的情况下创建一个新条目。我无法处理/传递主键Python 3.x &引用;更新;而不是",;“保存”;在Django模型中,没有主键,python-3.x,django,django-models,Python 3.x,Django,Django Models,如何进行“更新”而不是“保存”。我只想在“姓名”、“年龄”不存在的情况下创建一个新条目。我无法处理/传递主键 class Author(models.Model): name = models.CharField(max_length=50) age = models.PositiveIntegerField(null=True, blank=True) alias = models.CharField(max_length=50, null=True, blank=Tr
class Author(models.Model):
name = models.CharField(max_length=50)
age = models.PositiveIntegerField(null=True, blank=True)
alias = models.CharField(max_length=50, null=True, blank=True)
goes_by = models.CharField(max_length=50, null=True, blank=True)
flag = models.PositiveIntegerField()
date = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.name
objects = models.Manager()
def saveauthor(request):
if request.method == "POST":
nname = request.POST['name']
nage = request.POST['age']
nalias = request.POST['alias']
ngoes_by = request.POST['goes_by']
nflag = request.POST['flag']
new = Author(name = nname, age = nage, alias = nalias, goes_by= ngoes_by, flag=nflag)
new.save()
else:
pass
return JsonResponse("Ok", safe=False)
您可以使用
update\u或\u create
方法:
defaults = { "alias": nalias, "goes_by": ngoes_by, "flag": nflag }
Author.objects.update_or_create(name = nname, age = nage, defaults = defaults)
有关更多信息,请参见此处:您可以使用:
Author.objects.update\u或创建(
name=nname,
年龄=nage,
默认值=dict(别名=nalias,goes\U by=ngoes\U by,标志=nflag)
)
您可以这样做
from django.db.models import Q
def saveauthor(request):
if request.method == "POST":
if Author.objects.filter(Q(name=request.POST["name"])|Q(age=request.POST["age"])).first():
return JsonResponse(?)
nname = request.POST['name']
nage = request.POST['age']
nalias = request.POST['alias']
ngoes_by = request.POST['goes_by']
nflag = request.POST['flag']
new = Author(name = nname, age = nage, alias = nalias, goes_by= ngoes_by, flag=nflag)
new.save()
else:
pass
return JsonResponse("Ok", safe=False)
但请记住,“如上在get_或_create()中所述,此方法容易出现争用条件,如果在数据库级别不强制执行唯一性,则可能导致同时插入多行。”刚刚发现此争用条件,这实际上是在生成多个条目。@KapishM:是的,如前所述,您应该使
姓名
和年龄
的组合具有唯一性。
from django.db.models import Q
def saveauthor(request):
if request.method == "POST":
if Author.objects.filter(Q(name=request.POST["name"])|Q(age=request.POST["age"])).first():
return JsonResponse(?)
nname = request.POST['name']
nage = request.POST['age']
nalias = request.POST['alias']
ngoes_by = request.POST['goes_by']
nflag = request.POST['flag']
new = Author(name = nname, age = nage, alias = nalias, goes_by= ngoes_by, flag=nflag)
new.save()
else:
pass
return JsonResponse("Ok", safe=False)