Как я могу вручную отредактировать определенный атрибут в модели через Django Shell? - PullRequest
0 голосов
/ 25 сентября 2018

Недавно я добавил атрибут created_by в модель Store.Поскольку при создании хранилища автоматически регистрируется текущий зарегистрированный пользователь, если я не назначу пользователя вручную, этот столбец будет всегда нулевым.

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 голосов
/ 26 сентября 2018

Если вы обновляете все магазины, это будет быстрее.Итерация по хранилищам выбирает запись из базы данных и записывает обновленную запись, вызывая как минимум вдвое больше запросов, чем количество записей в БД.

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

Это должно обновить всев магазинах всего два запроса.

0 голосов
/ 25 сентября 2018

Попробуйте этот

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 QuerySet и назначить атрибут created_by с конкретным User экземпляром (здесь это user)


Если вы хотите создать Store объекты с created_by в качестве администратора, измените вашу модель, как показано ниже,

<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>)
...