Django 시트 업로드
특징
is_valid()
로 확인할 수 있습니다.row_preprocess
, save
, pre_load
, post_process
), 설치
pip install django-batch-sheet
INSTALLED_APPS=[
...
'batch_sheet'
...
]
예시
이러한 규칙을 가진 다음 모델이 있다고 가정해 보겠습니다.
Patient
개체로 저장됩니다.class Test(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class Gender (models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class Patient(models.Model):
name = models.CharField(max_length=50,verbose_name="Patient Name")
MRN = models.CharField(max_length=50)
gender= models.ForeignKey(Gender,on_delete=models.PROTECT,null=True, verbose_name="Gender")
date_of_birth = models.DateField(null=True,blank=True,verbose_name="Birth Date")
date_admitted = models.DateField(auto_now_add=True,auto_created=True)
lastUpdate = models.DateTimeField(auto_now=True)
class RequestedTest(models.Model):
patient = models.ForeignKey(Patient,on_delete=models.CASCADE)
test = models.ForeignKey(Test,on_delete=models.PROTECT,verbose_name="Test")
sample_date = models.DateField(auto_now_add=True,auto_created=True)
sample_type = models.CharField(max_length=50, verbose_name="Sample Type",choices=(('Blood','Blood'),('DNA','DNA')))
lastUpdate = models.DateTimeField(auto_now_add=True)
두 모델을 시트에 결합하려고 하므로 요청된 테스트와 함께 환자 정보를 한 행에 넣습니다.
따라서 환자를 위해 클래스
PatientSheet
를 다음과 같이 구현합니다.class PatientSheet(Sheet):
def save(self, obj:Patient, row_objs:dict):
"""Lets handle the save manually to check if the MRN exists"""
patient = Patient.objects.filter(MRN = obj.MRN)
if patient.exists():
p = patient[0]
else:
p = obj
p.save()
return p
class Meta:
exclude=('id','date_admitted','lastUpdate')
Model = Patient
obj_name = "patient"
title_header = True
메타 속성의 경우 메타 속성 섹션으로 이동하십시오.
RequestedTest Sheet의 경우 다음과 같이 진행됩니다.
class RequestedTestSheet(Sheet):
def save(self,obj,row_objs):
patient = row_objs.get('patient')
if patient is None:
return None
else:
obj.patient = patient
obj.save()
return obj
class Meta:
exclude =('id','sample_date','lastUpdate')
validation_exclude = ('patient',)
title_header = True
Model = RequestedTest
이제 하나의 시트로 합칠 수 있습니다.
class TestSheet(CombinedSheet):
patient = PatientSheet()
test = RequestedTestSheet()
이제 시트를 생성해 보겠습니다.
$ python manage.py generate_sheet --xls App.xls --sheet test_app.sheets.TestSheet
그러면 폴더의
App.xls
에 파일이 저장됩니다. 이제 App.xls
를 열 수 있습니다.데이터베이스의 값에 따라 드롭다운이 자동으로 표시됩니다.
메타 옵션
Class Meta:
rows_count = 10 # Number of rows to apply validations on
columns = () # Columns to add from the Model to the sheet
exclude = () # Columns to exclude
Model = None # Model to scan
raw_cols = [] # Foreign Key Field that shouldn't be set as dropdown
title_header = False # Make the titles as "First Name"
validation_exclude=[] # Don't validate these field, important in case of objects relationship
object_name = None # The name of the object saved, important in case of Combined Sheet.
Reference
이 문제에 관하여(Django 시트 업로드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mkalioby/django-sheet-upload-1dpd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)