با توجه به کدهای زیر چطوری میتونم list play رو طوری بنویسم که نام و نام خانوادگی بیمار و پزشک رو بصورت فیلد های جدا در پنل ادمین نمایش داده شود
from django.contrib import admin
from .models import PrescribedMedicationDetail, PatientsAppointment



@admin.register(PatientsAppointment)
class PatientsAppointmentAdmin(admin.ModelAdmin):
    raw_id_fields = ('sick', 'doctor',)
    filter_horizontal = ('symptoms', 'doctors_diagnosis', 'medical_tests', 'medical_imaging') 
    class PrescribedMedicationDetailInline(admin.TabularInline):
        model = PrescribedMedicationDetail
        extra = 1 
    inlines = [PrescribedMedicationDetailInline]

from django.contrib import admin
from django.db import models
from app_patients.models import PatientsInfo, DiseaseInfo, PatientSymptoms
from app_doctors.models import DoctorsInfo
from app_pharmacy.models import MedicinesInfo
from app_laboratory.models import MedicalTestTypes
from app_medicalImaging.models import PhotographyTypes

class PrescribedMedicationDetail(models.Model):
    appointment = models.ForeignKey(
        'PatientsAppointment',
        on_delete=models.CASCADE,
        related_name='medication_details',
        verbose_name="مراجعه"
    )
    medication = models.ForeignKey(
        MedicinesInfo,
        on_delete=models.CASCADE,
        verbose_name="دارو"
    )
    dosage = models.CharField(
        max_length=255,
        verbose_name="دوز مصرف"
    )
    duration = models.CharField(
        max_length=255,
        verbose_name="دوره مصرف"
    )
    additional_instructions = models.TextField(
        blank=True,
        null=True,
        verbose_name="توضیحات تکمیلی"
    )

    class Meta:
        db_table = 'tbl_prescribed_medication_detail'
        verbose_name_plural = 'جزئیات داروهای تجویز شده'

class PatientsAppointment(models.Model):
    sick = models.ForeignKey(
        PatientsInfo,
        on_delete=models.CASCADE,
        verbose_name="بیمار"
    )
    doctor = models.ForeignKey(
        DoctorsInfo,
        on_delete=models.SET_NULL,
        blank=True,
        null=True,
        verbose_name="پزشک معالج"
    )
    doctor_name = models.CharField(
        max_length=255,
        blank=True,
        null=True,
        verbose_name="نام پزشک"
    )
    appointment_date = models.DateTimeField(
        auto_now_add=True,
        verbose_name="تاریخ مراجعه"
    )
    symptoms = models.ManyToManyField(
        PatientSymptoms,
        blank=True,
        verbose_name="علائم بیمار"
    )
    doctors_diagnosis = models.ManyToManyField(
        DiseaseInfo,
        blank=True,
        verbose_name="تشخیص پزشک"
    )
    medical_tests = models.ManyToManyField(
        MedicalTestTypes,
        blank=True,
        verbose_name="آزمایشات تجویز شده"
    )
    medical_imaging = models.ManyToManyField(
        PhotographyTypes,
        blank=True,
        verbose_name="تصویربرداری های تجویز شده"
    )

    def save(self, *args, **kwargs):
        if self.doctor and (not self.doctor_name or f"{self.doctor.user.first_name} {self.doctor.user.last_name}" != self.doctor_name):
            self.doctor_name = f"{self.doctor.user.first_name} {self.doctor.user.last_name}"
        elif not self.doctor:
            self.doctor_name = "پزشک حذف شده"

        super().save(*args, **kwargs)

    def __str__(self):
        sick_name = f"{self.sick.sick.first_name} {self.sick.sick.last_name}" if self.sick else "بیمار ناشناخته"
        return f"{sick_name} - {self.doctor_name or 'پزشک ناشناخته'}"

    class Meta:
        db_table = 'tbl_patient_appointment'
        verbose_name_plural = 'مراجعات بیمار'




from django.db import models
from django.conf import settings
from app_pharmacy.models import MedicinesInfo


class PatientSymptoms(models.Model):
    name = models.CharField(
        max_length=100,
        unique=True,
        verbose_name="عنوان علائم"
    )

    def __str__(self):
        return self.name

    class Meta:
        db_table = 'tbl_patient_symptoms'
        verbose_name_plural = 'علائم های بیمار'


class DiseaseInfo(models.Model):
    name = models.CharField(
        max_length=100,
        unique=True,
        verbose_name="عنوان بیماری"
    )

    def __str__(self):
        return self.name

    class Meta:
        db_table = 'tbl_disease_info'
        verbose_name_plural = 'اطلاعات بیماری ها'


class Insurance(models.Model):
    name = models.CharField(
        max_length=100,
        unique=True,
        verbose_name="عنوان بیمه"
    )

    def __str__(self):
        return self.name

    class Meta:
        db_table = 'tbl_insurance_type'
        verbose_name_plural = 'نوع بیمه درمانی'


class PatientsInfo(models.Model):
    sick = models.OneToOneField(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
        verbose_name="بیمار"
    )
    insurance_type = models.ForeignKey(
        Insurance,
        on_delete=models.SET_NULL,
        null=True,
        verbose_name="نوع بیمه"
    )
    underlying_disease = models.ManyToManyField(
        DiseaseInfo,
        blank=True,
        verbose_name='بیماری زمینه ای'
    )
    drug_sensitivity = models.ManyToManyField(
        MedicinesInfo,
        blank=True,
        verbose_name='حساسیت دارویی'
    )
    
    def __str__(self):
        return f"{self.sick.first_name} {self.sick.last_name}"

    class Meta:
        db_table = 'tbl_patients_info'
        verbose_name_plural = 'اطلاعات بیمار'

# from django.db import models
# from django.conf import settings
# from app_medicalCenters.models import MedicalCenterInfo


# class Specialty(models.Model):
#     name = models.CharField(
#         max_length=100, 
#         unique=True, 
#         verbose_name="تخصص"
#     )

#     def __str__(self):
#         return self.name

#     class Meta:
#         db_table = 'tbl_doctor_specialtys'
#         verbose_name_plural = 'تخصص‌های پزشکی'


# class University(models.Model):
#     name = models.CharField(
#         max_length=100, 
#         unique=True, 
#         verbose_name="نام دانشگاه"
#     )

#     def __str__(self):
#         return self.name

#     class Meta:
#         db_table = 'tbl_doctor_universitys'
#         verbose_name_plural = 'دانشگاه‌های پزشکی'


# class Degree(models.Model):
#     name = models.CharField(
#         max_length=100, 
#         unique=True, 
#         verbose_name="مقطع تحصیلی"
#     )

#     def __str__(self):
#         return self.name

#     class Meta:
#         db_table = 'tbl_doctor_degrees'
#         verbose_name_plural = 'مدارج تحصیلی'


# class DoctorsInfo(models.Model):
#     user = models.OneToOneField(
#         settings.AUTH_USER_MODEL, 
#         on_delete=models.CASCADE, 
#         verbose_name="کاربر"
#     )
#     specialties = models.ManyToManyField(
#         Specialty, 
#         blank=True, 
#         verbose_name="تخصص‌ها"
#     )
#     university = models.ForeignKey(
#         University, 
#         on_delete=models.SET_NULL, 
#         blank=True, 
#         null=True, 
#         verbose_name="فارغ‌التحصیل"
#     )
#     degree = models.ForeignKey(
#         Degree, 
#         on_delete=models.SET_NULL, 
#         blank=True, 
#         null=True, 
#         verbose_name="مدرک تحصیلی"
#     )
#     profile_image = models.ImageField(
#         upload_to='app_doctors/profile_image/', 
#         blank=True, 
#         null=True, 
#         verbose_name='تصویر پروفایل پزشک'
#     )
#     introduction_video = models.FileField(
#         upload_to='app_doctors/introduction_video/', 
#         blank=True, 
#         null=True,
#         verbose_name='ویدیو معرفی پزشک'
#     )
#     office_location = models.CharField(
#         max_length=15, 
#         blank=True, 
#         null=True, 
#         verbose_name='لوکیشن مطب'
#     )
#     resume = models.TextField(
#         blank=True, 
#         null=True, 
#         verbose_name='رزومه'
#     )
#     description = models.TextField(
#         blank=True, 
#         null=True, 
#         verbose_name='توضیحات'
#     )
#     name_medical_centers = models.ManyToManyField(
#         MedicalCenterInfo, 
#         blank=True, 
#         verbose_name="فعالیت در مراکز درمانی"
#     )

#     def __str__(self):
#         return f"{self.user.first_name} {self.user.last_name}"

#     class Meta:
#         db_table = 'tbl_doctor_info'
#         verbose_name_plural = 'اطلاعات پزشک'

from django.db import models
from django.conf import settings
from app_medicalCenters.models import MedicalCenterInfo


class Specialty(models.Model):
    name = models.CharField(
        max_length=100, 
        unique=True, 
        verbose_name="تخصص"
    )

    def __str__(self):
        return self.name

    class Meta:
        db_table = 'tbl_doctor_specialties'
        verbose_name_plural = 'تخصص‌های پزشکی'


class University(models.Model):
    name = models.CharField(
        max_length=100, 
        unique=True, 
        verbose_name="نام دانشگاه"
    )

    def __str__(self):
        return self.name

    class Meta:
        db_table = 'tbl_doctor_universities'
        verbose_name_plural = 'دانشگاه‌های پزشکی'


class Degree(models.Model):
    name = models.CharField(
        max_length=100, 
        unique=True, 
        verbose_name="مقطع تحصیلی"
    )

    def __str__(self):
        return self.name

    class Meta:
        db_table = 'tbl_doctor_degrees'
        verbose_name_plural = 'مدارج تحصیلی'


class DoctorsInfo(models.Model):
    user = models.OneToOneField(
        settings.AUTH_USER_MODEL, 
        on_delete=models.CASCADE, 
        verbose_name="کاربر"
    )
    specialties = models.ManyToManyField(
        Specialty, 
        blank=True, 
        verbose_name="تخصص‌ها"
    )
    university = models.ForeignKey(
        University, 
        on_delete=models.SET_NULL, 
        blank=True, 
        null=True, 
        verbose_name="فارغ‌التحصیل"
    )
    degree = models.ForeignKey(
        Degree, 
        on_delete=models.SET_NULL, 
        blank=True, 
        null=True, 
        verbose_name="مدرک تحصیلی"
    )
    profile_image = models.ImageField(
        upload_to='app_doctors/profile_image/', 
        blank=True, 
        null=True, 
        verbose_name='تصویر پروفایل پزشک'
    )
    introduction_video = models.FileField(
        upload_to='app_doctors/introduction_video/', 
        blank=True, 
        null=True,
        verbose_name='ویدیو معرفی پزشک'
    )
    office_location = models.CharField(
        max_length=15, 
        blank=True, 
        null=True, 
        verbose_name='لوکیشن مطب'
    )
    resume = models.TextField(
        blank=True, 
        null=True, 
        verbose_name='رزومه'
    )
    description = models.TextField(
        blank=True, 
        null=True, 
        verbose_name='توضیحات'
    )
    name_medical_centers = models.ManyToManyField(
        MedicalCenterInfo, 
        blank=True, 
        verbose_name="فعالیت در مراکز درمانی"
    )

    def __str__(self):
        return f"{self.user.first_name} {self.user.last_name}"

    class Meta:
        db_table = 'tbl_doctor_info'
        verbose_name_plural = 'اطلاعات پزشک'

class DoctorsDatabase(models.Model):
    medical_id = models.CharField(
        max_length=40, 
        primary_key=True, 
        verbose_name="شماره نظام پزشکی"
    )
    first_name = models.CharField(
        max_length=30, 
        blank=True, 
        null=True, 
        verbose_name="نام"
    )
    last_name = models.CharField(
        max_length=50, 
        blank=True, 
        null=True, 
        verbose_name="نام خانوادگی"
    )
    specialtie = models.CharField(
        max_length=255, 
        blank=True, 
        null=True, 
        verbose_name="تخصص"
    )
    city = models.CharField(
        max_length=100, 
        blank=True, 
        null=True, 
        verbose_name="شهر"
    )
    degree = models.CharField(
        max_length=100, 
        blank=True, 
        null=True, 
        verbose_name="مدرک تحصیلی"
    )

    def __str__(self):
        return f"{self.first_name} {self.last_name} نظام پزشکی: {self.medical_id}"

    class Meta:
        db_table = 'tbl_doctor_database'
        verbose_name_plural = 'پایگاه داده پزشکان'

from django.db import models
from django.contrib.auth.models import AbstractUser
from django.utils import timezone
import uuid
import random
import string
from datetime import timedelta
from app_account.msg_sender import send_otp


# region ==> Custom User Model
class CustomUser(AbstractUser):
    
    class GenderChoices(models.TextChoices):
        MALE = 'male', "مرد"
        FEMALE = 'female', "زن"

    username = models.CharField(
        max_length=10, 
        unique=True, 
        verbose_name='کد ملی'
    )
    first_name = models.CharField(
        max_length=20, 
        blank=True, 
        null=True, 
        verbose_name='نام'
    )
    last_name = models.CharField(
        max_length=40, 
        blank=True, 
        null=True, 
        verbose_name='نام خانوادگی'
    )
    phone_number = models.CharField(
        max_length=11, 
        blank=True, 
        null=True,
        verbose_name='شماره همراه'
    )
    gender = models.CharField(
        max_length=6, 
        blank=True, 
        null=True, 
        choices=GenderChoices.choices, 
        verbose_name='جنسیت'
    )
    birth_date = models.DateField(
        blank=True, 
        null=True, 
        verbose_name='تاریخ تولد'
    )

    def __str__(self) -> str:
        return f"{self.first_name} {self.last_name}"

    class Meta:
        db_table = 'tbl_user_info'
        verbose_name_plural = 'مشخصات کاربران'
# endregion