This is my entire models.py
```
from django.db import models
from django.utils import timezone
from django.urls import reverse_lazy, reverse
# Create your models here.
class Requisition(models.Model):
# constants
FROZEN = 'Frozen'
CHILLED = 'Chilled/Cold Pack'
DRYICE = 'Dry Ice'
ROOMTEMP = 'Room Temperature'
TRANSPORT_CHOICE =
[(FROZEN,FROZEN),(CHILLED,CHILLED),(DRYICE,DRYICE),(ROOMTEMP,ROOMTEMP)]
EMAIL = 'email'
HARDCOPY = 'Hardcopy Pickup'
BOTH = 'Email & Hardcopy Pickup'
RECEIPT_CHOICE = [(EMAIL,EMAIL), (HARDCOPY,HARDCOPY), (BOTH,BOTH)]
ACUTE = 'Acute'
CHRONIC = 'Chronic'
SYMPTOMS_CHOICE = [(ACUTE,ACUTE,), (CHRONIC,CHRONIC)]
#columns
accession_number = models.CharField(max_length=254, unique=True,
help_text='format:
VSLXXX-XXX')
customer = models.ForeignKey('general.Customer', on_delete=models.CASCADE,
related_name='requisition')
# Veterinary Officer Info
veterinary_officer = models.CharField(max_length=50, blank=True)
address = models.CharField(max_length=50, blank=True)
contact_number = models.CharField(max_length=13, blank=True, help_text="number
format example: +592 XXX XXXX")
email_address = models.EmailField(max_length=50, blank=True)
# General sample info
collected_by = models.CharField(max_length=50)
time_of_collection = models.DateTimeField()
method_of_transport = models.CharField(max_length=50, choices
=TRANSPORT_CHOICE)
result_transmission = models.CharField(max_length=50, choices
=RECEIPT_CHOICE)
#pathology
reason_for_request = models.ManyToManyField('ReasonForRequest',related_name=
'requisition', blank=True)
illness_date = models.DateField('Date of onset of illness', blank=True, null
=True)
illness_duration = models.CharField('Duration of illness', max_length=254,
blank=True)
symptoms = models.CharField(max_length=50, choices=SYMPTOMS_CHOICE, blank=
True)
fever = models.BooleanField('Presence of Fever', blank=True, null=True)
body_temp = models.PositiveSmallIntegerField('Max body Temperature (C)',
blank=True, null=True)
fever_duration = models.CharField('Duration of Fever',max_length=50, blank=
True)
signs = models.ManyToManyField('Signs', related_name='requisition', blank=
True)
vaccination_status = models.CharField(max_length=50, blank=True)
vaccination_date = models.DateField('Date of Vaccination', blank=True, null=
True)
treatments = models.TextField('Previous/Current Treatments', blank=True)
exposed = models.ManyToManyField('Exposed', related_name='requisition',
through='ExposureHistory', blank=True)
comments = models.TextField(blank=True)
recieved_by = models.ForeignKey('auth.User', on_delete=models.CASCADE)
submitted_by = models.CharField(max_length=254, help_text='if multiple
persons separate names using "&" exampe: John Doe & Jane Doe')
date_of_submission = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.accession_number
def get_absolute_url(self):
return reverse("laboratory:requisition_details", kwargs={'pk':self.pk})
class ExposureHistory(models.Model):
requisition = models.ForeignKey('Requisition', on_delete=models.CASCADE,
related_name='exposurehistory')
exposed = models.ForeignKey('Exposed', on_delete=models.CASCADE,
related_name='exposurehistory')
name = models.CharField(max_length=50, blank=True)
address = models.CharField(max_length=254, blank=True)
contact_number = models.CharField(max_length=10, blank=True)
exposure_date = models.DateField('Date of Exposure',blank=True, null=True)
exposure_site = models.CharField('Site of Exposure', max_length=254)
def __str__(self):
return self.name
class Sample(models.Model):
# constants
ONE = 1
TWO = 2
THREE = 3
FOUR = 4
FIVE = 5
BODY_CONDITION_SCORE_CHOICE = [(ONE,'1'), (TWO,'2'), (THREE,'3'), (FOUR,'4'),
(FIVE,'5')]
MALE = 'Male'
FEMALE = 'Female'
UNDETERMINED = 'Undetermined'
SEX_CHOICE = [(MALE,MALE), (FEMALE,FEMALE), (UNDETERMINED,UNDETERMINED)]
requisition = models.ForeignKey('Requisition', on_delete=models.CASCADE,
related_name='sample')
sample_id = models.CharField(max_length=50) # accession number plus animal
id
animal_category = models.ForeignKey('AnimalCategory', on_delete=models.CASCADE,
related_name='sample',)
breed = models.CharField(max_length=50, blank=True)
body_condition_score = models.PositiveSmallIntegerField(choices
=BODY_CONDITION_SCORE_CHOICE,blank=True, null=True)
sex = models.CharField(max_length=50, choices=SEX_CHOICE, default
=UNDETERMINED)
age = models.CharField(max_length=50, blank=True)
specimen_information = models.ForeignKey('SpecimenInfo',
on_delete=models.CASCADE,
related_name='sample')
tests = models.ManyToManyField('Test', related_name='sample')
parasitology_infection = models.ManyToManyField('Infection', related_name=
'samplepar', through='ParasitologyResult', blank=True)
pathology_infection = models.ManyToManyField('Infection', related_name=
'samplepath', through='PathologyResult', blank=True)
def __str__(self):
return f"{self.requisition} {self.sample_id}"
class ParasitologyResult(models.Model):
department = models.ForeignKey('Department', on_delete=models.CASCADE,
related_name='parasitologyresults')
lab_code = models.CharField(max_length=50)
sample = models.ForeignKey('Sample', on_delete=models.CASCADE, related_name=
'parasitologyresults' )
test = models.ForeignKey('Test', on_delete=models.CASCADE, related_name=
'parasitologyresults')
infection = models.ForeignKey('Infection', on_delete=models.CASCADE,
related_name='parasitologyresults')
parasite_load = models.IntegerField() # number of parasite in sample
unit = models.CharField(max_length=50, blank=True)
rank = models.CharField(max_length=50, blank=True)
performed_by = models.ManyToManyField('auth.User',related_name=
'parasitologyresults')
comments = models.TextField(blank=True)
def __str__(self):
return self.lab_code
class PathologyResult(models.Model):
department = models.ForeignKey('Department', on_delete=models.CASCADE,
related_name='pathologyresults')
lab_code = models.CharField(max_length=50, unique=True)
sample = models.ForeignKey('Sample', on_delete=models.CASCADE, related_name=
'pathologyresults' )
test = models.ForeignKey('Test', on_delete=models.CASCADE, related_name=
'pathologyresults')
infection = models.ForeignKey('Infection', on_delete=models.CASCADE,
related_name='pathologyresults')
observation = models.TextField('Gross Observations', blank=True)
comments = models.TextField('Additional Comments/Observation', blank=True)
diagnosis = models.TextField('Summarize Preliminary Diagnoses')
performed_by = models.ManyToManyField('auth.User',related_name=
'pathologyresults')
def __str__(self):
return self.lab_code
class SerologyResult(models.Model):
department = models.ForeignKey('Department', on_delete=models.CASCADE,
related_name='serologyresults')
lab_code = models.CharField(max_length=50, unique=True)
sample = models.ForeignKey('Sample', on_delete=models.CASCADE, related_name=
'serologyresults' )
test = models.ForeignKey('Test', on_delete=models.CASCADE, related_name=
'serologyresults')
infection = models.ForeignKey('Infection', on_delete=models.CASCADE,
related_name='serologyresults')
performed_by = models.CharField(max_length=254, help_text='if multiple
persons separate names using "&" exampe: John Doe & Jane Doe')
def __str__(self):
return self.lab_code
class MicrobiologyResult(models.Model):
department = models.ForeignKey('Department', on_delete=models.CASCADE,
related_name='microbiologyresults')
lab_code = models.CharField(max_length=50, unique=True)
sample = models.ForeignKey('Sample', on_delete=models.CASCADE, related_name=
'microbiologyresults' )
test = models.ForeignKey('Test', on_delete=models.CASCADE, related_name=
'microbiologyresults')
infection = models.ForeignKey('Infection', on_delete=models.CASCADE,
related_name='microbiologyresults')
results = models.TextField()
performed_by = models.ManyToManyField('auth.User',related_name=
'microbiologyresults')
def __str__(self):
return self.lab_code
# Create your options table for your models here
class AnimalCategory(models.Model):
common_name = models.CharField(max_length=50, unique=True)
family = models.CharField(max_length=50, help_text='Taxonomic Famiily name')
role = models.CharField(max_length=50, help_text='Economic or social role
of animal Eg. broiler, dairy, companion, exotic')
def __str__(self):
return self.family
class Department(models.Model):
name = models.CharField(max_length=50, unique=True)
description = models.TextField()
def __str__(self):
return self.name
class Exposed(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class Infection(models.Model):
name = models.CharField(max_length=254)
Description = models.TextField
def __str__(self):
return self.name
class ReasonForRequest(models.Model):
category = models.CharField(max_length=50,)
name = models.CharField(max_length=50, unique=True)
def __str__(self):
return self.name
class SpecimenInfo(models.Model):
category = models.CharField(max_length=50)
component = models.CharField(max_length=50, unique=True)
def __str__(self):
return self.component
class Signs(models.Model):
name = models.CharField(max_length=50, unique=True)
def __str__(self):
return self.name
class Test(models.Model):
category = models.CharField(max_length=50)
test = models.CharField(max_length=50, unique=True)
def __str__(self):
return f'{self.category}: {self.test}'
```
On Thursday, 13 June 2019 21:31:29 UTC-4, curtly critchlow wrote:
>
> CreateView class not saving data to database. When I hit submit, the html
> the page only refreshes. l'm not getting any errors so I have no idea what
> i'm doing wrong. Does CreateView automatically takes care of many to many
> relationships? here is my code below, I've been trying to solve this
> problem 2 days now.
>
>
> 1. Models.py
> 2.
> 3. from django.db import models
> 4. from django.utils import timezone
> 5. from django.urls import reverse_lazy, reverse
> 6.
> 7. # Create your models here.
> 8.
> 9. class Requisition(models.Model):
> 10. # constants
> 11. FROZEN = 'Frozen'
> 12. CHILLED = 'Chilled/Cold Pack'
> 13. DRYICE = 'Dry Ice'
> 14. ROOMTEMP = 'Room Temperature'
> 15. TRANSPORT_CHOICE =
> [(FROZEN,FROZEN),(CHILLED,CHILLED),(DRYICE,DRYICE),(ROOMTEMP,ROOMTEMP)]
> 16.
> 17. EMAIL = 'email'
> 18. HARDCOPY = 'Hardcopy Pickup'
> 19. BOTH = 'Email & Hardcopy Pickup'
> 20. RECEIPT_CHOICE = [(EMAIL,EMAIL), (HARDCOPY,HARDCOPY),
> (BOTH,BOTH)]
> 21.
> 22.
> 23. ACUTE = 'Acute'
> 24. CHRONIC = 'Chronic'
> 25. SYMPTOMS_CHOICE = [(ACUTE,ACUTE,), (CHRONIC,CHRONIC)]
> 26.
> 27. #columns
> 28. accession_number = models.CharField(max_length=254,
> unique=True, help_text='format: VSLXXX-XXX')
> 29. customer = models.ForeignKey('general.Customer',
> on_delete=models.CASCADE, related_name='requisition')
> 30.
> 31. # Veterinary Officer Info
> 32. veterinary_officer = models.CharField(max_length=50, blank=True)
> 33. address = models.CharField(max_length=50, blank=True)
> 34. contact_number = models.CharField(max_length=13, blank=True,
> help_text="number format example: +592 XXX XXXX")
> 35. email_address = models.EmailField(max_length=50, blank=True)
> 36.
> 37. # General sample info
> 38.
> 39. collected_by = models.CharField(max_length=50)
> 40. time_of_collection = models.DateTimeField()
> 41.
> 42.
> 43. method_of_transport = models.CharField(max_length=50,
> choices=TRANSPORT_CHOICE)
> 44. result_transmission = models.CharField(max_length=50,
> choices=RECEIPT_CHOICE)
> 45.
> 46. #pathology
> 47. reason_for_request =
> models.ManyToManyField('ReasonForRequest',related_name='requisition',
> blank=True)
> 48. illness_date = models.DateField('Date of onset of illness',
> blank=True, null=True)
> 49. illness_duration = models.CharField('Duration of illness',
> max_length=254, blank=True)
> 50. symptoms = models.CharField(max_length=50,
> choices=SYMPTOMS_CHOICE, blank=True)
> 51. fever = models.BooleanField('Presence of Fever', blank=True,
> null=True)
> 52. body_temp = models.PositiveSmallIntegerField('Max body
> Temperature (C)', blank=True, null=True)
> 53. fever_duration = models.CharField('Duration of
> Fever',max_length=50, blank=True)
> 54. signs = models.ManyToManyField('Signs',
> related_name='requisition', blank=True)
> 55. vaccination_status = models.CharField(max_length=50, blank=True)
> 56. vaccination_date = models.DateField('Date of Vaccination',
> blank=True, null=True)
> 57. treatments = models.TextField('Previous/Current Treatments',
> blank=True)
> 58. exposed = models.ManyToManyField('Exposed',
> related_name='requisition', through='ExposureHistory', blank=True)
> 59.
> 60. comments = models.TextField(blank=True)
> 61. recieved_by = models.ForeignKey('auth.User',
> on_delete=models.CASCADE)
> 62. submitted_by = models.CharField(max_length=254, help_text='if
> multiple persons separate names using "&" exampe: John Doe &
> Jane Doe')
> 63. date_of_submission = models.DateTimeField(auto_now_add=True)
> 64.
> 65. def __str__(self):
> 66. return self.accession_number
> 67.
> 68. def get_absolute_url(self):
> 69. return reverse("laboratory:requisition_details",
> kwargs={'pk':self.pk})
> 70.
> 71. forms.py
> 72.
> 73. from django.forms import ModelForm
> 74. from general.models import Customer
> 75. from laboratory.models import Requisition
> 76. from bootstrap_datepicker_plus import DatePickerInput,
> DateTimePickerInput
> 77.
> 78. class RequisitionForm(ModelForm):
> 79. class Meta:
> 80. model = Requisition
> 81. fields = '__all__'
> 82. widgets = {
> 83. 'illness_date': DatePickerInput,
> 84. 'vaccination_date': DatePickerInput,
> 85. 'date_of_submission': DateTimePickerInput,
> 86. }
> 87. views.py
> 88. from django.contrib.auth.mixins import LoginRequiredMixin
> 89. from django.urls import reverse_lazy, reverse
> 90. from django.shortcuts import render
> 91. from django.views.generic import TemplateView, CreateView,
> DetailView, ListView, UpdateView, DeleteView
> 92. from general.models import Customer
> 93. from laboratory.models import Requisition, Sample
> 94. from laboratory.forms import RequisitionForm
> 95. # Create your views here.
> 96.
> 97. class RequisitionListView(LoginRequiredMixin, ListView):
> 98. model = Requisition
> 99. context_object_name = 'requisition_list'
> 100. template_name ='laboratory/requisition_list.html'
> 101.
> 102. class RequisitionDetailView(DetailView):
> 103. model = Requisition
> 104. context_object_name = 'requisition_details'
> 105. template_name='laboratory/requisition_details.html'
> 106.
> 107. class RequisitionCreateView(LoginRequiredMixin, CreateView):
> 108. model = Requisition
> 109. form_class= RequisitionForm
> 110. template_name = 'laboratory/requisition_create.html'
> 111.
> 112. requisition_create.html
> 113. {% extends "user_home.html" %}
> 114. {% load static %}
> 115. {% load widget_tweaks %}
> 116. {% load bootstrap4 %}
> 117. {% bootstrap_css %}
> 118. {% bootstrap_javascript jquery='full' %}
> 119. {{ form.media }}
> 120.
> 121. {% block form %}
> 122. <div class="main jumbotron">
> 123. <h1>Complete Requisition form below</h1>
> 124. <p></p>
> 125. <form method="POST">
> 126. {% csrf_token %}
> 127. <div class='row'>
> 128. <div class='col'>
> 129. <div class="card">
> 130. <div class="card-header">
> 131. General Information
> 132. </div>
> 133. <div class="card-body fieldwrapper form-group">
> 134. {{ form.accession_number.errors }}
> 135. {{ form.accession_number.label_tag }}
> 136. {{ form.accession_number|add_class:"form-control" }}
> 137. <p></p>
> 138. {{ form.customers.errors }}
> 139. {{ form.customer.label_tag }}
> 140. {{ form.customer|add_class:"form-control" }}
> 141. <p></p>
> 142. {{ form.collected_by.errors }}
> 143. {{ form.collected_by.label_tag }}
> 144. {{ form.collected_by|add_class:"form-control" }}
> 145. <p></p>
> 146. {{ form.recieved_by.errors }}
> 147. {{ form.recieved_by.label_tag }}
> 148. {{ form.recieved_by|add_class:"form-control" }}
> 149. <p></p>
> 150. {{ form.submitted_by.errors }}
> 151. {{ form.submitted_by.label_tag }}
> 152. {{ form.submitted_by|add_class:"form-control" }}
> 153. <p></p>
> 154. {{ form.date_of_submission.errors }}
> 155. {{ form.date_of_submission.label_tag }}
> 156. {{ form.date_of_submission|add_class:"form-control" }}
> 157.
> 158. </div>
> 159. </div>
> 160. </div>
> 161.
> 162. <p></p>
> 163. <div class="col">
> 164. <div class="card">
> 165. <div class='card-header'>
> 166. Veterinarian/Leo/Lea Information
> 167. </div>
> 168. <div class="card-body">
> 169. {{ form.veterinary_officer.errors }}
> 170. {{ form.veterinary_officer.label_tag }}
> 171. {{ form.veterinary_officer|add_class:"form-control" }}
> 172. <p></p>
> 173. {{ form.address.errors }}
> 174. {{ form.address.label_tag }}
> 175. {{ form.address|add_class:"form-control" }}
> 176. <p></p>
> 177. {{ form.contact_number.errors }}
> 178. {{ form.contact_number.label_tag }}
> 179. {{ form.contact_number|add_class:"form-control" }}
> 180. <p></p>
> 181. {{ form.email_address.errors }}
> 182. {{ form.email_address.label_tag }}
> 183. {{ form.email_address|add_class:"form-control" }}
> 184. </div>
> 185. </div>
> 186. </div>
> 187.
> 188. </div>
> 189.
> 190. <p></p>
> 191.
> 192. <div class="card">
> 193. <div class='card-header'>
> 194. Transmission Information
> 195. </div>
> 196. <div class="card-body">
> 197. {{ form.method_of_transport.errors }}
> 198. {{ form.method_of_transport.label_tag }}
> 199. {{ form.method_of_transport|add_class:"form-control" }}
> 200. <p></p>
> 201. {{ form.result_transmission.errors }}
> 202. {{ form.result_transmission.label_tag }}
> 203. {{ form.result_transmission|add_class:"form-control" }}
> 204.
> 205. </div>
> 206. </div>
> 207. <p></p>
> 208. <div class="card">
> 209. <div class='card-header'>
> 210. Pathology Information
> 211. </div>
> 212. <div class="card-body row">
> 213. <div class='col'>
> 214. {{ form.reason_for_request.errors }}
> 215. {{ form.reason_for_request.label_tag }}
> 216. {{ form.reason_for_request|add_class:"form-control" }}
> 217. <p></p>
> 218. {{ form.illness_date.errors }}
> 219. {{ form.illness_date.label_tag }}
> 220. {{ form.illness_date|add_class:"form-control" }}
> 221. <p></p>
> 222. {{ form.symptoms.errors }}
> 223. {{ form.symptoms.label_tag }}
> 224. {{ form.symptoms|add_class:"form-control" }}
> 225. <p></p>
> 226. {{ form.fever.errors }}
> 227. {{ form.fever.label_tag }}
> 228. {{ form.fever|add_class:"form-control" }}
> 229. <p></p>
> 230. {{ form.body_temp.errors }}
> 231. {{ form.body_temp.label_tag }}
> 232. {{ form.body_temp|add_class:"form-control" }}
> 233. <p></p>
> 234. {{ form.fever_duration.errors }}
> 235. {{ form.fever_duration.label_tag }}
> 236. {{ form.fever_duration|add_class:"form-control" }}
> 237. <p></p>
> 238. </div>
> 239.
> 240. <div class='col'>
> 241. {{ form.signs.errors }}
> 242. {{ form.signs.label_tag }}
> 243. {{ form.signs|add_class:"form-control" }}<p></p>
> 244. <p></p>
> 245. {{ form.vaccination_status.errors }}
> 246. {{ form.vaccination_status.label_tag }}
> 247. {{ form.vaccination_status|add_class:"form-control" }}
> 248. <p></p>
> 249. {{ form.vaccination_date.errors }}
> 250. {{ form.vaccination_date.label_tag }}
> 251. {{ form.vaccination_date|add_class:"form-control" }}
> 252. <p></p>
> 253. {{ form.treatments.errors }}
> 254. {{ form.treatments.label_tag }}
> 255. {{ form.treatments|add_class:"form-control" }}
> 256. <p></p>
> 257. {{ form.exposed.errors }}
> 258. {{ form.exposed.label_tag }}
> 259. {{ form.exposed|add_class:"form-control" }}
> 260. </div>
> 261. </div>
> 262. </div>
> 263. <p></p>
> 264. {{ form.comments.errors }}
> 265. {{ form.comments.label_tag }}
> 266. {{ form.comments|add_class:"form-control" }}
> 267. <p></p>
> 268.
> 269. <input type="submit" class='btn btn-primary' value='Submit'>
> 270.
> 271.
> 272. </form>
> 273. </div>
> 274.
> 275. {% endblock form %}
>
>
>
>
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-users/07e4d5aa-5f16-424b-a820-7900f53f24da%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.