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 django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
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.

Reply via email to