如何通过 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)
这将在两次查询中更新所有商店。
我最近在 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)
这将在两次查询中更新所有商店。