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.
50 lines
1.3 KiB
50 lines
1.3 KiB
from django.core.management.base import BaseCommand
|
|
import json
|
|
from service import models
|
|
|
|
|
|
def create_fixture(name, file_path, merge):
|
|
if merge:
|
|
with open(file_path, 'r') as f:
|
|
old_data = json.load(f)
|
|
max_pk = max([x['pk'] for x in old_data])
|
|
else:
|
|
max_pk = 0
|
|
model = getattr(models, name)
|
|
model_default_data = {
|
|
f.name: {
|
|
"label": f.verbose_name,
|
|
"legend": f.verbose_name,
|
|
"help": f.verbose_name
|
|
}
|
|
for f in model._meta.fields
|
|
}
|
|
|
|
data = {
|
|
"model": "service.config",
|
|
"pk": max_pk + 1,
|
|
"fields": {
|
|
"name": f"{name}",
|
|
"data": model_default_data
|
|
}
|
|
}
|
|
|
|
with open(file_path, 'w') as f:
|
|
if merge:
|
|
old_data.append(data)
|
|
json.dump(old_data, f, ensure_ascii=False, indent=4)
|
|
else:
|
|
json.dump([data], f, ensure_ascii=False, indent=4)
|
|
|
|
|
|
class Command(BaseCommand):
|
|
requires_system_checks = False
|
|
|
|
def add_arguments(self, parser):
|
|
parser.add_argument('-n', '--name', type=str)
|
|
parser.add_argument('-f', '--file', type=str)
|
|
parser.add_argument('-m', '--merge', type=bool, default=False)
|
|
|
|
def handle(self, name, file, merge, *args, **options):
|
|
create_fixture(name, file, merge)
|