mbti / bootstrap_hf.py
asemxin2000's picture
Deploy Django MBTI test to Hugging Face Space
d2f89d7 verified
Raw
History Blame Contribute Delete
2.99 kB
#!/usr/bin/env python
import json
import os
import sys
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
if BASE_DIR not in sys.path:
sys.path.insert(0, BASE_DIR)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mbti_site.settings")
import django
django.setup()
from django.contrib.auth import get_user_model
from database_management.add_questions_from_json import get_question_dimension_and_pole
from database_management.populate_personality_data import personality_data
from mbti.models import Question, Questionnaire, TypeProfile
def ensure_admin():
user_model = get_user_model()
username = os.getenv("DJANGO_SUPERUSER_USERNAME", "admin")
email = os.getenv("DJANGO_SUPERUSER_EMAIL", "admin@example.com")
password = os.getenv("DJANGO_SUPERUSER_PASSWORD", "admin@123..")
user, created = user_model.objects.get_or_create(
username=username,
defaults={"email": email, "is_staff": True, "is_superuser": True},
)
if created:
user.set_password(password)
user.save()
elif not user.is_superuser or not user.is_staff:
user.is_staff = True
user.is_superuser = True
user.set_password(password)
user.save()
def ensure_questions():
json_path = os.path.join(BASE_DIR, "data", "questions_standard_mbti_93.json")
with open(json_path, "r", encoding="utf-8") as f:
questions_data = json.load(f)
qnn, _ = Questionnaire.objects.get_or_create(
key="mbti_standard_93",
defaults={
"name": "标准MBTI 93题测试",
"description": "标准MBTI人格类型测试,共93题",
"is_active": True,
},
)
Questionnaire.objects.exclude(pk=qnn.pk).update(is_active=False)
if not qnn.is_active:
qnn.is_active = True
qnn.save(update_fields=["is_active"])
for item in questions_data:
question_id = item["id"]
question_text = item["question"].strip()
option_a = item["optionA"].strip()
option_b = item["optionB"].strip()
dimension, keyed_pole = get_question_dimension_and_pole(question_id)
full_text = f"{question_id}. {question_text} A) {option_a} B) {option_b}"
Question.objects.update_or_create(
questionnaire=qnn,
order=question_id,
defaults={
"text": full_text,
"dimension": dimension,
"keyed_pole": keyed_pole,
"weight": 1,
"active": True,
},
)
def ensure_profiles():
for code, data in personality_data.items():
profile, created = TypeProfile.objects.get_or_create(code=code, defaults=data)
if not created:
for field, value in data.items():
setattr(profile, field, value)
profile.save()
def main():
ensure_admin()
ensure_questions()
ensure_profiles()
print("Bootstrap completed.")
if __name__ == "__main__":
main()