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

How can I manually edit a specific attribute in a model through Django Shell?

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

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 中做到这一点?

试试这个

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

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

遍历 Store 查询集并使用特定 User 实例分配 created_by 属性(这里是user


如果您希望以 created_by 作为管理员创建 Store 对象,请按以下方式更改您的模型,

<b>from django.contrib.auth.models import User


def default_admin():
    return User.objects.get(username='admin@gmail.com')</b>


class Store(models.Model):
    created_by = ForeignKey(settings.AUTH_USER_MODEL, related_name='stores_of_created_by', <b>default=default_admin</b>)

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

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

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