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)