我有模特儿说
class ABC(models.Model):
x = models.CharFeild(max_length=100)
y = model.IntegerFeild(default=1)
另一个模型是
class XYZ(models.Model):
a = models.CharFeild(max_length=100)
abc = model.ForeignKey(ABC, db_index=True)
我现有的数据库看起来像
ABC
id x y
1 a 10
2 b 20
3 c 30
. . .
. . .
XYZ
id a abc_id
1 x 1
2 y 2
3 z 3
. . .
. . .
因此,现在我想更新该字段(如果它存在于模型XYZ中),即在abc_id = 1或2或3的地方更改列'a'的值,如果该abc_id不存在,则创建一个新行。
答案 0 :(得分:2)
使用QuerySet的update_or_create()
方法
new_value = {"a": "new value"}
XYZ.objects.update_or_create(abc_id=1,defaults=new_value)
注意:我不确定是否可以通过 update_or_create()
添加 LOGICAL OR 条件方法
更新
defaults = {"a": "new value"}
try:
obj = XYZ.objects.get(abc_id=1)
for key, value in defaults.items():
setattr(obj, key, value)
obj.save()
except XYZ.DoesNotExist:
new_values = {"abc_id": 1}
new_values.update(defaults)
obj = XYZ(**new_values)
obj.save()
答案 1 :(得分:0)
有多种更新记录的方法(如果存在), 在下面的示例中,我将创建一个公司资料模型,该模型仅用于 1次访问网站,并且不应重复, 如您所见,我们将使用 带有默认值的'COMP_Prof_identity'可以检查/更新记录(如果存在),如果不存在则创建它。
model.py文件:
class Company_Profile(models.Model):
COMP_Company_Name = models.CharField(max_length=40, default='Company Name')
COMP_Company_Website = models.CharField(max_length=50, default='www.yourdomain.tld')
COMP_Prof_identity = models.CharField(max_length=40, default='Company_identity', unique=True )
在view.py
def f_company_profile(request):
if request.method == 'POST':
q_Company_Name = request.POST.get("q_Company_Name")
q_Company_Website = request.POST.get("q_Company_Website")
if q_Company_Name and q_Company_Website:
Company_Profile_exist = False
try:
Company_Profile_exist = Company_Profile.objects.get(COMP_Prof_identity='Company_identity')
except:
pass
if Company_Profile_exist:
try:
Company_Profile_exist.COMP_Company_Name = q_Company_Name
Company_Profile_exist.COMP_Company_Website = q_Company_Website
Company_Profile_exist.save()
except:
messages.warning(request, "sorry, can't update company name ")
else:
try:
Company_Profile.objects.create(COMP_Company_Name=q_Company_Name,
COMP_Company_Website=q_Company_Website
)
except:
messages.warning(request, "sorry, can't Create company name ")
我希望这对您有所帮助, 这只是获得概念的一个例子 您可以使用此概念,并在其他情况下在需要的地方使用它。