update rcr migration app

This commit is contained in:
Ross
2023-11-12 18:58:45 +00:00
parent 0fad480db4
commit b7fb96633e
10 changed files with 179 additions and 11 deletions
+1
View File
@@ -1059,4 +1059,5 @@ table .peninsula-trainee::before {
.form-control { .form-control {
background-color: unset; background-color: unset;
color: unset
} }
+3 -1
View File
@@ -2,8 +2,10 @@ from django.contrib import admin
# Register your models here. # Register your models here.
from rcr.models import Item, Category, Level from rcr.models import Item, Category, Level, Outcome, OutcomeReason
admin.site.register(Item) admin.site.register(Item)
admin.site.register(Category) admin.site.register(Category)
admin.site.register(Level) admin.site.register(Level)
admin.site.register(Outcome)
admin.site.register(OutcomeReason)
@@ -0,0 +1,38 @@
# Generated by Django 4.1.4 on 2023-11-12 18:53
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('rcr', '0002_alter_item_category_alter_item_level'),
]
operations = [
migrations.CreateModel(
name='Outcome',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=255)),
],
),
migrations.AddField(
model_name='item',
name='assessed_by',
field=models.ManyToManyField(blank=True, to=settings.AUTH_USER_MODEL),
),
migrations.AddField(
model_name='item',
name='assessed_date',
field=models.DateTimeField(auto_now=True),
),
migrations.AddField(
model_name='item',
name='outcome',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='rcr.outcome'),
),
]
@@ -0,0 +1,26 @@
# Generated by Django 4.1.4 on 2023-11-12 18:55
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('rcr', '0003_outcome_item_assessed_by_item_assessed_date_and_more'),
]
operations = [
migrations.CreateModel(
name='OutcomeReason',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('reason', models.CharField(max_length=255)),
],
),
migrations.AddField(
model_name='item',
name='outcome_reason',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='rcr.outcomereason'),
),
]
+24
View File
@@ -1,4 +1,6 @@
from django.conf import settings
from django.db import models from django.db import models
from django.urls import reverse
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
# Create your models here. # Create your models here.
@@ -20,12 +22,22 @@ class Item(models.Model):
level = models.ManyToManyField("Level", blank=True) level = models.ManyToManyField("Level", blank=True)
assessed_date = models.DateTimeField(auto_now=True)
assessed_by = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True)
outcome = models.ForeignKey("Outcome", on_delete=models.SET_NULL, blank=True, null=True)
outcome_reason = models.ForeignKey("OutcomeReason", on_delete=models.SET_NULL, blank=True, null=True)
completed = models.BooleanField(default=False) completed = models.BooleanField(default=False)
def __str__(self): def __str__(self):
return self.name return self.name
def get_absolute_url(self):
return reverse("rcr:radiology_detail_view", kwargs={"pk": self.pk})
class Category(models.Model): class Category(models.Model):
name = models.CharField(max_length=255) name = models.CharField(max_length=255)
@@ -38,3 +50,15 @@ class Level(models.Model):
def __str__(self): def __str__(self):
return self.name return self.name
class Outcome(models.Model):
name = models.CharField(max_length=255)
def __str__(self):
return self.name
class OutcomeReason(models.Model):
reason = models.CharField(max_length=255)
def __str__(self):
return self.reason
+20 -1
View File
@@ -2,6 +2,21 @@
{% block content %} {% block content %}
{% if completed %}
<h2>Completed items:</h2>
{% else %}
<h2>Items to assess:</h2>
{% endif %}
{% if items %}
<a href="{% url 'rcr:radiology_update_next_view' %}">Click to assess next item</a>
{% endif %}
<ul> <ul>
{% for item in items %} {% for item in items %}
@@ -10,10 +25,14 @@
<a href="{% url 'rcr:radiology_detail_view' item.pk %}">view</a> <a href="{% url 'rcr:radiology_detail_view' item.pk %}">view</a>
<a href="{% url 'rcr:radiology_update_view' item.pk %}">edit</a> <a href="{% url 'rcr:radiology_update_view' item.pk %}">edit</a>
</li> </li>
{% empty %}
No items found.
{% endfor %} {% endfor %}
</ul> </ul>
TEST
<a href="{% url 'rcr:radiology_index_view' %}">Todo</a>
<a href="{% url 'rcr:radiology_index_completed_view' %}">Done</a>
{% endblock %} {% endblock %}
+16
View File
@@ -2,6 +2,22 @@
{% block content %} {% block content %}
<h2>Item: {{object.name}}</h2> <h2>Item: {{object.name}}</h2>
<p>Category: {{object.category}}</p>
<p>
Level(s):
{% for level in object.level.all %}
{{level}},
{% endfor %}
</p>
<p>
Completed: {{object.completed}}
</p>
<p><a href='{% url "rcr:radiology_update_view" object.pk %}'>Edit</a></p>
<details><summary> </summary> <details><summary> </summary>
</details> </details>
{% endblock %} {% endblock %}
+2
View File
@@ -5,6 +5,8 @@
{% comment %} {% if request.user.is_superuser %} {% comment %} {% if request.user.is_superuser %}
(<a href="{% url 'admin:auth_user_change' object.id %}" title="Edit the user using the admin interface">Admin Edit</a>) (<a href="{% url 'admin:auth_user_change' object.id %}" title="Edit the user using the admin interface">Admin Edit</a>)
{% endif %} {% endcomment %} {% endif %} {% endcomment %}
<p>Link: <a href="" title="Link to content on learning hub">click here</a></p>
<form method="post">{% csrf_token %} <form method="post">{% csrf_token %}
{{ form|crispy }} {{ form|crispy }}
<input type="submit" value="Update"> <input type="submit" value="Update">
+1
View File
@@ -12,6 +12,7 @@ app_name = "rcr"
urlpatterns = [ urlpatterns = [
path("radiology/", views.radiology_index, name="radiology_index_view"), path("radiology/", views.radiology_index, name="radiology_index_view"),
path("radiology/completed", views.radiology_index_completed, name="radiology_index_completed_view"),
path("radiology/item/<int:pk>/", views.ItemDetailView.as_view(), name="radiology_detail_view"), path("radiology/item/<int:pk>/", views.ItemDetailView.as_view(), name="radiology_detail_view"),
path("radiology/item/next/update", views.ItemUpdateNextView.as_view(), name="radiology_update_next_view"), path("radiology/item/next/update", views.ItemUpdateNextView.as_view(), name="radiology_update_next_view"),
path("radiology/item/<int:pk>/update", views.ItemUpdateView.as_view(), name="radiology_update_view"), path("radiology/item/<int:pk>/update", views.ItemUpdateView.as_view(), name="radiology_update_view"),
+46 -7
View File
@@ -1,6 +1,7 @@
from typing import Any from typing import Any
from django.db import models from django.db import models
from django.shortcuts import render from django.http import Http404
from django.shortcuts import redirect, render
from django.urls import reverse_lazy from django.urls import reverse_lazy
from django.views.generic.edit import UpdateView from django.views.generic.edit import UpdateView
from django.views.generic.detail import DetailView from django.views.generic.detail import DetailView
@@ -12,18 +13,40 @@ from rcr.forms import ItemForm
def radiology_index(request): def radiology_index(request):
items = Item.objects.all() items = Item.objects.all().exclude(completed=True)
return render( return render(
request, request,
"rcr/index.html", "rcr/index.html",
{ {
"items": items "items": items,
"completed": False
},
)
def radiology_index_completed(request):
items = Item.objects.filter(completed=True)
return render(
request,
"rcr/index.html",
{
"items": items,
"completed": True
}, },
) )
class ItemUpdateView(UpdateView): class ItemUpdateBase(UpdateView):
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.save()
form.instance.author.add(self.request.user.id)
return super().form_valid(form)
class ItemUpdateView(ItemUpdateBase):
model = Item model = Item
form_class = ItemForm form_class = ItemForm
@@ -31,17 +54,33 @@ class ItemUpdateView(UpdateView):
#excludes = ["rcr_platform_id"] #excludes = ["rcr_platform_id"]
#fields = ["category", "level"] #fields = ["category", "level"]
class ItemUpdateNextView(UpdateView): class ItemUpdateNextView(ItemUpdateBase):
model = Item model = Item
form_class = ItemForm form_class = ItemForm
template_name = "rcr/item_update.html" template_name = "rcr/item_update.html"
def get(self, request, *args, **kwargs):
try:
self.object = self.get_object()
print("What", self.object)
except Http404:
print("YES")
# redirect here
return redirect("rcr:radiology_index_view")
context = self.get_context_data(object=self.object)
return self.render_to_response(context)
def get_object(self): def get_object(self):
obj = Item.objects.filter(completed=False).first() obj = Item.objects.filter(completed=False).first()
#~if not obj: print("HELLO", obj)
#~ return reverse_lazy("rcr:radiology_index_view") print(obj)
if not obj:
print("raise")
raise Http404
return obj return obj
print("test") print("test")