You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

54 lines
1.4 KiB

#!/usr/bin/env python
import os
from json import dump
from django import setup
class BatchSaveStreamList(list):
def __init__(self, model_class, model_name, *args, **kwargs):
super().__init__(*args, **kwargs)
self._model_class = model_class
self._model_name = model_name
def __iter__(self):
def fields(obj):
return {ob.name: getattr(obj, ob.name) or None for ob in obj._meta.concrete_fields if ob.name != 'id'}
for d in self._model_class.objects.all().iterator():
yield {
"model": self._model_name,
"pk": d.pk,
"fields": fields(d)
}
def __len__(self):
return 1
def batch_save(fname, model_class, model_name):
sa = BatchSaveStreamList(
model_class=model_class,
model_name=model_name
)
with open(fname, 'w') as f:
dump(sa, f, ensure_ascii=False, indent=2)
# ---------------------
def dump_groups():
from group_app.models import Group
batch_save("groups.json", Group, 'groupapp.group')
def dump_accounts():
from accounts_app.models import UserProfile, BaseAccount
batch_save('accounts_baseaccount.json', BaseAccount, 'profiles.baseaccount')
batch_save('accounts_userprofile.json', UserProfile, 'profiles.userprofile')
if __name__ == '__main__':
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'djing.settings')
setup()
dump_groups()