如何通过Django Shell手动编辑模型中的特定属性?

时间:2018-09-25 07:14:26

标签: django django-shell

我最近在created_by模型中添加了Store属性。由于这会在创建商店时自动获取当前登录的用户,因此,如果我不手动分配任何用户,则该列将永远为null。

class Store(models.Model):
        ...
        created_by = ForeignKey(settings.AUTH_USER_MODEL, related_name='stores_of_created_by', null=True, blank=True)

因此,我想手动分配一个用户。我认为Django Shell(可以通过python manage.py shell触发的某种方式)将是手动分配用户的好方法。

我很困惑如何在所有商店的特定属性中手动分配用户。到目前为止,我已经通过以下方式获得了一个特定的用户和所有商店。

from django.contrib.auth.models import User
from boutique.models import Store

stores = Store.objects.all()
user = User.objects.get(username='admin@gmail.com')

此后,我需要遍历所有商店,并在所有商店的created_by中分配用户。如何在Django Shell中做到这一点?

2 个答案:

答案 0 :(得分:1)

尝试一下

from django.contrib.auth.models import User
from boutique.models import Store

stores = Store.objects.all()
user = User.objects.get(username='admin@gmail.com')
for store in stores:
    store.created_by = user
    store.save()

Store QuerySet中循环,并为created_by属性分配特定的 User 实例(此处为{{1} })


如果您希望以user作为管理员来创建 Store 对象,请按如下所示更改模型,

created_by

答案 1 :(得分:1)

如果要更新所有商店,这将更快。 对存储进行迭代会从数据库中获取记录并写入更新的记录,从而导致查询的数量至少是数据库中记录数量的两倍。

admin = User.objects.get(username='admin@gmail.com') Store.objects.update(created_by=admin)

这将在两个查询中更新所有商店。