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.
136 lines
4.4 KiB
136 lines
4.4 KiB
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
import os
|
|
from json import dump
|
|
import django
|
|
|
|
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djing.settings")
|
|
django.setup()
|
|
from django.db.models import fields as django_fields
|
|
|
|
|
|
def get_fixture_from_unchanget_model(model_name: str, model_class):
|
|
"""
|
|
Создаёт фикстуру если модели между версиями не изменились
|
|
:param model_name: str 'app_label.model_name'
|
|
:param model_class: Model модель для которой надо сделать фикстуру
|
|
:return: список словарей
|
|
"""
|
|
print(model_name)
|
|
|
|
def get_fields(obj):
|
|
fields = dict()
|
|
for field in obj._meta.get_fields():
|
|
if isinstance(field, django_fields.reverse_related.ManyToOneRel) or \
|
|
isinstance(field, django_fields.reverse_related.ManyToManyRel):
|
|
continue
|
|
field_val = getattr(obj, field.name)
|
|
if field_val is None:
|
|
continue
|
|
if isinstance(field, django_fields.related.ManyToManyField):
|
|
fields[field.name] = [f.pk for f in field_val.all()]
|
|
elif isinstance(field, django_fields.related.ForeignKey):
|
|
fields[field.name] = field_val.pk
|
|
elif isinstance(field, django_fields.FloatField):
|
|
fields[field.name] = float(field_val)
|
|
elif isinstance(field, django_fields.DateTimeField):
|
|
fields[field.name] = str(field_val)
|
|
elif isinstance(field, django_fields.AutoField):
|
|
continue
|
|
else:
|
|
fields[field.name] = field_val
|
|
return fields
|
|
res = [{
|
|
'model': model_name,
|
|
'pk': obj.pk,
|
|
'fields': get_fields(obj)
|
|
} for obj in model_class.objects.all()]
|
|
return res
|
|
|
|
|
|
def dump_abonapp():
|
|
from abonapp import models
|
|
res = [{
|
|
'model': 'group_app.group',
|
|
'pk': abon_group.pk,
|
|
'fields': {
|
|
'title': abon_group.title
|
|
}
|
|
} for abon_group in models.AbonGroup.objects.all()]
|
|
|
|
#res += get_fixture_from_unchanget_model('abonapp.abonlog', models.AbonLog)
|
|
|
|
res += get_fixture_from_unchanget_model('abonapp.abontariff', models.AbonTariff)
|
|
|
|
res += get_fixture_from_unchanget_model('abonapp.abonstreet', models.AbonStreet)
|
|
|
|
res += get_fixture_from_unchanget_model('abonapp.extrafieldsmodel', models.ExtraFieldsModel)
|
|
|
|
res += get_fixture_from_unchanget_model('abonapp.abon', models.Abon)
|
|
'''res += [{
|
|
'model': 'abonapp.abon',
|
|
'pk': ab.pk,
|
|
'fields': {
|
|
'current_tariff': ab.current_tariff.pk,
|
|
'group': ab.group.pk,
|
|
'ballance': ab.ballance,
|
|
'ip_address': ab.ip_address,
|
|
'description': ab.description,
|
|
'street': ab.street,
|
|
'house': ab.house,
|
|
'extra_fields': [pid.pk for pid in ab.extra_fields.all()],
|
|
'device': ab.device.pk,
|
|
'dev_port': ab.dev_port.pk,
|
|
'is_dynamic_ip': ab.is_dynamic_ip
|
|
}
|
|
} for ab in models.Abon.objects.all()]'''
|
|
|
|
res += get_fixture_from_unchanget_model('abonapp.passportinfo', models.PassportInfo)
|
|
|
|
res += get_fixture_from_unchanget_model('abonapp.invoiceforpayment', models.InvoiceForPayment)
|
|
|
|
res += get_fixture_from_unchanget_model('abonapp.alltimepaylog', models.AllTimePayLog)
|
|
|
|
res += get_fixture_from_unchanget_model('abonapp.abonrawpassword', models.AbonRawPassword)
|
|
|
|
res += get_fixture_from_unchanget_model('abonapp.additionaltelephone', models.AdditionalTelephone)
|
|
|
|
res += get_fixture_from_unchanget_model('abonapp.periodicpayforid', models.PeriodicPayForId)
|
|
|
|
return res
|
|
|
|
|
|
def dump_tariffs():
|
|
from tariff_app import models
|
|
res = get_fixture_from_unchanget_model('tariff_app.Tariff', models.Tariff)
|
|
|
|
res += get_fixture_from_unchanget_model('tariff_app.periodicpay', models.PeriodicPay)
|
|
|
|
return res
|
|
|
|
|
|
def dump_devs():
|
|
pass
|
|
#from devapp import models
|
|
|
|
|
|
|
|
def make_migration():
|
|
from datetime import datetime
|
|
from datetime import date
|
|
|
|
def my_date_converter(o):
|
|
if isinstance(o, datetime) or isinstance(o, date):
|
|
return "%s" % o
|
|
|
|
def appdump(fname, func):
|
|
with open(fname, 'w') as f:
|
|
dump(func(), f, default=my_date_converter, ensure_ascii=False)
|
|
|
|
appdump('abon_fixture.json', dump_abonapp)
|
|
appdump('tariffs_fixture.json', dump_tariffs)
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
make_migration()
|