我的问题与此问题非常相似:How to modify a queryset and save it as new objects?
假设我的模型有以下字段:
class myModel(models.Model):
articleId = models.ForeignKey(otherModel)
myCounter = models.IntegerField
现在,假设将articleId保持为常量,我想通过改变myCounter来保存多行。这就是我想要做的事情:
for x in range(1, 5):
m = myModel()
m.articleId = otherModel.objects.get(pid="some constant")
m.myCounter = x
m.save()
m.id = None
正如上述帖子(以及其他类似网站)所建议的那样,我尝试同时设置' id'和' pk'没有。但没有任何帮助。
此代码只在数据库中写入一行,并且正在更新myCounter的值。我如何提交4个不同的行?
答案 0 :(得分:0)
您可以使用bulk_create
for this:
an_article_object = otherModel.objects.create(name="Some Constant")
myModel.objects.bulk_create([
myModel(articleId=an_article_object, myCounter=x) for x in range(1, 5)
])
编辑:
要在循环中修复您的问题:
article = otherModel.objects.create(name="SomeConst")
#or fetch the article object
m = myModel(articleId = article)
for x in range(1, 5):
m.myCounter = x
m.pk = None
m.save()
答案 1 :(得分:0)
模型 -
$client->send($request)
代码 -
myCounter = models.AutoField(primary_key=True)
#myCounter = models.AutoField(primary_key=False)
#you use primary_key = True if you do not want to use default field "id" given by django to your model
答案 2 :(得分:0)
如果您想更改相同的object
,可以试试这个:
m = myModel()
for x in range(1, 5):
m.articleId = otherModel.objects.get(pid="some constant")
m.myCounter = x
m.save()
答案 3 :(得分:0)
您可以使用force_insert
参数强制INSERT
语句。如果插入失败,这将引发错误,但它不会以静默方式更新现有对象。
m.save(force_insert=True)