我最近在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
中做到这一点?
答案 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)
这将在两个查询中更新所有商店。