Django:修改模型对象并另存为新

时间:2015-06-23 03:15:19

标签: django

我的问题与此问题非常相似: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个不同的行?

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)