python-3.x - 没有主键的Django模型中的“更新”而不是“保存”
问题描述
如何进行“更新”而不是“保存”。只有当“姓名”、“年龄”已经不存在时,我才想创建一个新条目。我无法处理/传递主键。
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_or_create
方法:
defaults = { "alias": nalias, "goes_by": ngoes_by, "flag": nflag }
Author.objects.update_or_create(name = nname, age = nage, defaults = defaults)
有关更多信息,请参见此处:https ://docs.djangoproject.com/en/3.1/ref/models/querysets/#update-or-create
推荐阅读
- android - 按需动态功能模块安装始终返回已安装状态,但从不下载模块
- android - 如何在构建过程中仅包含所需的 SDK(工厂设计模式)
- android - Android Gradle 插件错误:字符串太大,无法使用 UTF-8 进行编码,而是写为“STRING_TOO_LARGE”
- php - 如何在加载js之前使用来自url的值设置cookie
- sql - 如果它与当前值相同,则忽略最后一个值
- python - 删除类方法python生成的所有变量(类)
- asp.net - 我可以将会话值传递给变量,然后将其保存到另一个 guid 类型变量吗
- latex - sty 颜色缺失问题 Beamer Poster JHR
- go - 格式字符串中没有占位符
- c# - Xamarin 选项卡式页面选项卡没有填满空间?