Switch to generic notes
This commit is contained in:
@@ -143,6 +143,7 @@ class QuestionNote(models.Model):
|
|||||||
return "{}: {} [{}] {} / {}".format(self.content_type, self.get_author_str(), self.created_on, self.note_type, self.note)
|
return "{}: {} [{}] {} / {}".format(self.content_type, self.get_author_str(), self.created_on, self.note_type, self.note)
|
||||||
|
|
||||||
def get_absolute_url(self):
|
def get_absolute_url(self):
|
||||||
|
# TODO: return to question if logged in
|
||||||
return "/"
|
return "/"
|
||||||
|
|
||||||
def get_object_url(self):
|
def get_object_url(self):
|
||||||
|
|||||||
+1
-2
@@ -1,5 +1,5 @@
|
|||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from .models import Long, LongSeries, LongSeriesImage, Note, LongCreationDefault, Exam, CidUserAnswer
|
from .models import Long, LongSeries, LongSeriesImage, LongCreationDefault, Exam, CidUserAnswer
|
||||||
|
|
||||||
import tagulous.admin
|
import tagulous.admin
|
||||||
|
|
||||||
@@ -16,7 +16,6 @@ from generic.models import Examination, Sign, Condition
|
|||||||
# Register your models here.
|
# Register your models here.
|
||||||
# admin.site.register(Examination)
|
# admin.site.register(Examination)
|
||||||
# admin.site.register(Site)
|
# admin.site.register(Site)
|
||||||
admin.site.register(Note)
|
|
||||||
admin.site.register(LongCreationDefault)
|
admin.site.register(LongCreationDefault)
|
||||||
admin.site.register(LongSeriesImage)
|
admin.site.register(LongSeriesImage)
|
||||||
admin.site.register(CidUserAnswer)
|
admin.site.register(CidUserAnswer)
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ from django.forms import inlineformset_factory
|
|||||||
|
|
||||||
from longs.models import (
|
from longs.models import (
|
||||||
#Examination,
|
#Examination,
|
||||||
Note,
|
|
||||||
Long,
|
Long,
|
||||||
LongSeries,
|
LongSeries,
|
||||||
LongSeriesImage,
|
LongSeriesImage,
|
||||||
@@ -49,13 +48,6 @@ class ExaminationForm(ModelForm):
|
|||||||
fields = ["examination"]
|
fields = ["examination"]
|
||||||
|
|
||||||
|
|
||||||
class NoteForm(ModelForm):
|
|
||||||
class Meta:
|
|
||||||
model = Note
|
|
||||||
fields = ["note"]
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class LongCreationDefaultForm(ModelForm):
|
class LongCreationDefaultForm(ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = LongCreationDefault
|
model = LongCreationDefault
|
||||||
|
|||||||
@@ -550,25 +550,6 @@ class LongSeries(models.Model):
|
|||||||
# image_tag.short_description = 'Image'
|
# image_tag.short_description = 'Image'
|
||||||
|
|
||||||
|
|
||||||
class Note(models.Model):
|
|
||||||
long = models.ForeignKey(
|
|
||||||
Long, related_name="long_notes", on_delete=models.CASCADE, null=True
|
|
||||||
)
|
|
||||||
# author = models.ForeignKey(User,
|
|
||||||
author = models.ForeignKey(
|
|
||||||
settings.AUTH_USER_MODEL, related_name="long_notes", on_delete=models.CASCADE
|
|
||||||
)
|
|
||||||
note = models.TextField()
|
|
||||||
created_on = models.DateTimeField(auto_now_add=True)
|
|
||||||
|
|
||||||
def get_absolute_url(self):
|
|
||||||
self.pk = self.long_id
|
|
||||||
return reverse("longs:question_detail", kwargs={"pk": self.pk})
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return "{} [{}] {}".format(self.long, self.author, self.created_on)
|
|
||||||
|
|
||||||
|
|
||||||
class LongCreationDefault(models.Model):
|
class LongCreationDefault(models.Model):
|
||||||
# author = models.OneToOneField(User,
|
# author = models.OneToOneField(User,
|
||||||
author = models.OneToOneField(
|
author = models.OneToOneField(
|
||||||
|
|||||||
@@ -71,13 +71,6 @@
|
|||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
Notes:
|
Notes:
|
||||||
<ul>
|
|
||||||
{% for note in question.long_notes.all %}
|
|
||||||
<li>
|
|
||||||
{{ note.created_on }} by {{ note.author }}: {{ note.note }}
|
|
||||||
</li>
|
|
||||||
{% endfor %}
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
|
|||||||
@@ -1,12 +0,0 @@
|
|||||||
{% extends "longs/base.html" %}
|
|
||||||
|
|
||||||
{% block content %}
|
|
||||||
<h2>Add Note</h2>
|
|
||||||
<form action="" method="post">
|
|
||||||
{% csrf_token %}
|
|
||||||
<table>
|
|
||||||
{{ form.as_table }}
|
|
||||||
</table>
|
|
||||||
<input type="submit" value="Submit">
|
|
||||||
</form>
|
|
||||||
{% endblock %}
|
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
<a href="{% url 'longs:long_update' pk=question.pk %}" title="Edit the Long">Edit</a>
|
<a href="{% url 'longs:long_update' pk=question.pk %}" title="Edit the Long">Edit</a>
|
||||||
<a href="{% url 'longs:long_clone' pk=question.pk %}" title="Clone the Long (duplicate everything but the images)">Clone</a>
|
<a href="{% url 'longs:long_clone' pk=question.pk %}" title="Clone the Long (duplicate everything but the images)">Clone</a>
|
||||||
<a href="{% url 'longs:long_delete' pk=question.pk %}" title="Delete the Rapid">Delete</a>
|
<a href="{% url 'longs:long_delete' pk=question.pk %}" title="Delete the Rapid">Delete</a>
|
||||||
<a href="{% url 'longs:long_add_note' pk=question.pk %}"> Add Note</a>
|
<a href="{% url 'feedback_create' question_type='long' pk=question.pk %}"> Add Note</a>
|
||||||
{% if request.user.is_superuser %}
|
{% if request.user.is_superuser %}
|
||||||
<a href="{% url 'admin:longs_long_change' question.id %}" title="Edit the Long using the admin interface">Admin Edit</a>
|
<a href="{% url 'admin:longs_long_change' question.id %}" title="Edit the Long using the admin interface">Admin Edit</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@@ -168,7 +168,6 @@ urlpatterns = [
|
|||||||
views.LongSeriesUpdate.as_view(),
|
views.LongSeriesUpdate.as_view(),
|
||||||
name="long_series_update",
|
name="long_series_update",
|
||||||
),
|
),
|
||||||
path("<int:pk>/add_note", views.AddNote.as_view(), name="long_add_note"),
|
|
||||||
path(
|
path(
|
||||||
"user_answers/",
|
"user_answers/",
|
||||||
views.UserAnswerTableView.as_view(),
|
views.UserAnswerTableView.as_view(),
|
||||||
|
|||||||
@@ -25,13 +25,11 @@ from .forms import (
|
|||||||
LongSeriesForm, LongSeriesImageFormSet,
|
LongSeriesForm, LongSeriesImageFormSet,
|
||||||
MarkLongQuestionForm,
|
MarkLongQuestionForm,
|
||||||
SeriesFormSet,
|
SeriesFormSet,
|
||||||
NoteForm,
|
|
||||||
ExaminationForm,
|
ExaminationForm,
|
||||||
ExamForm,
|
ExamForm,
|
||||||
)
|
)
|
||||||
from .models import (
|
from .models import (
|
||||||
Long, LongSeries,
|
Long, LongSeries,
|
||||||
Note,
|
|
||||||
Examination,
|
Examination,
|
||||||
Exam,
|
Exam,
|
||||||
CidUserAnswer,
|
CidUserAnswer,
|
||||||
@@ -124,7 +122,6 @@ def question_detail(request, pk):
|
|||||||
# if request.user not in long.author.all():
|
# if request.user not in long.author.all():
|
||||||
# raise PermissionDenied
|
# raise PermissionDenied
|
||||||
|
|
||||||
# logging.debug(long.long_notes.first())
|
|
||||||
# logging.debug(long.subspecialty.first().name.all())
|
# logging.debug(long.subspecialty.first().name.all())
|
||||||
return render(request, "longs/question_detail.html", {"question": long})
|
return render(request, "longs/question_detail.html", {"question": long})
|
||||||
|
|
||||||
@@ -136,7 +133,6 @@ def long_series_detail(request, pk):
|
|||||||
# if request.user not in long.author.all():
|
# if request.user not in long.author.all():
|
||||||
# raise PermissionDenied
|
# raise PermissionDenied
|
||||||
|
|
||||||
# logging.debug(long.long_notes.first())
|
|
||||||
# logging.debug(long.subspecialty.first().name.all())
|
# logging.debug(long.subspecialty.first().name.all())
|
||||||
return render(request, "longs/long_series.html", {"series": series})
|
return render(request, "longs/long_series.html", {"series": series})
|
||||||
|
|
||||||
@@ -174,7 +170,6 @@ def long_split(request, pk):
|
|||||||
# if request.user not in long.author.all():
|
# if request.user not in long.author.all():
|
||||||
# raise PermissionDenied
|
# raise PermissionDenied
|
||||||
|
|
||||||
# logging.debug(long.long_notes.first())
|
|
||||||
# logging.debug(long.subspecialty.first().name.all())
|
# logging.debug(long.subspecialty.first().name.all())
|
||||||
return render(request, "longs/question_detail.html", {"question": long})
|
return render(request, "longs/question_detail.html", {"question": long})
|
||||||
|
|
||||||
@@ -236,37 +231,6 @@ class LongCreationDefaultView(LoginRequiredMixin, UpdateView):
|
|||||||
# form.instance.author.add(self.request.user.id)
|
# form.instance.author.add(self.request.user.id)
|
||||||
|
|
||||||
|
|
||||||
class AddNote(LoginRequiredMixin, CreateView):
|
|
||||||
model = Note
|
|
||||||
form_class = NoteForm
|
|
||||||
|
|
||||||
# fields = '__all__'
|
|
||||||
# #fields = [ 'condition' ]
|
|
||||||
# #initial = {'date_of_death': '05/01/2018'}
|
|
||||||
# exclude = [ 'created_date', 'published_date' ]
|
|
||||||
def dispatch(self, request, *args, **kwargs):
|
|
||||||
"""
|
|
||||||
Overridden so we can make sure the `Long` instance exists
|
|
||||||
before going any further.
|
|
||||||
"""
|
|
||||||
self.pk = get_object_or_404(Long, pk=kwargs["pk"])
|
|
||||||
return super().dispatch(request, *args, **kwargs)
|
|
||||||
|
|
||||||
def form_valid(self, form):
|
|
||||||
|
|
||||||
note = form.save(commit=False)
|
|
||||||
|
|
||||||
note.long = self.pk
|
|
||||||
|
|
||||||
note.author = self.request.user
|
|
||||||
note.save()
|
|
||||||
|
|
||||||
response = super().form_valid(form)
|
|
||||||
|
|
||||||
return response
|
|
||||||
|
|
||||||
# form.instance.author.add(self.request.user.id)
|
|
||||||
|
|
||||||
#@login_required
|
#@login_required
|
||||||
#@user_is_author_or_long_checker
|
#@user_is_author_or_long_checker
|
||||||
#def long_delete(request, pk):
|
#def long_delete(request, pk):
|
||||||
|
|||||||
+1
-2
@@ -1,5 +1,5 @@
|
|||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from .models import Rapid, RapidImage, Examination, Site, Abnormality, Region, Note, RapidCreationDefault, Answer, Exam, CidUserAnswer
|
from .models import Rapid, RapidImage, Examination, Site, Abnormality, Region, RapidCreationDefault, Answer, Exam, CidUserAnswer
|
||||||
|
|
||||||
import tagulous.admin
|
import tagulous.admin
|
||||||
|
|
||||||
@@ -13,7 +13,6 @@ admin.site.register(Examination)
|
|||||||
#admin.site.register(Site)
|
#admin.site.register(Site)
|
||||||
admin.site.register(Abnormality)
|
admin.site.register(Abnormality)
|
||||||
admin.site.register(Region)
|
admin.site.register(Region)
|
||||||
admin.site.register(Note)
|
|
||||||
admin.site.register(RapidCreationDefault)
|
admin.site.register(RapidCreationDefault)
|
||||||
admin.site.register(Answer)
|
admin.site.register(Answer)
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ from django.forms import inlineformset_factory
|
|||||||
from rapids.models import (
|
from rapids.models import (
|
||||||
Abnormality,
|
Abnormality,
|
||||||
Examination,
|
Examination,
|
||||||
Note,
|
|
||||||
Rapid,
|
Rapid,
|
||||||
RapidCreationDefault,
|
RapidCreationDefault,
|
||||||
RapidImage,
|
RapidImage,
|
||||||
@@ -44,12 +43,6 @@ class ExaminationForm(ModelForm):
|
|||||||
fields = ["examination"]
|
fields = ["examination"]
|
||||||
|
|
||||||
|
|
||||||
class NoteForm(ModelForm):
|
|
||||||
class Meta:
|
|
||||||
model = Note
|
|
||||||
fields = ["note"]
|
|
||||||
|
|
||||||
|
|
||||||
class RegionForm(ModelForm):
|
class RegionForm(ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Region
|
model = Region
|
||||||
|
|||||||
@@ -425,26 +425,6 @@ class RapidImage(models.Model):
|
|||||||
image_tag.short_description = 'Image'
|
image_tag.short_description = 'Image'
|
||||||
|
|
||||||
|
|
||||||
class Note(models.Model):
|
|
||||||
rapid = models.ForeignKey(Rapid,
|
|
||||||
related_name="rapid_notes",
|
|
||||||
on_delete=models.CASCADE,
|
|
||||||
null=True)
|
|
||||||
#author = models.ForeignKey(User,
|
|
||||||
author = models.ForeignKey( settings.AUTH_USER_MODEL,
|
|
||||||
related_name="rapid_notes",
|
|
||||||
on_delete=models.CASCADE)
|
|
||||||
note = models.TextField()
|
|
||||||
created_on = models.DateTimeField(auto_now_add=True)
|
|
||||||
|
|
||||||
def get_absolute_url(self):
|
|
||||||
self.pk = self.rapid_id
|
|
||||||
return reverse('rapids:question_detail', kwargs={'pk': self.pk})
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return "{} [{}] {}".format(self.rapid, self.author, self.created_on)
|
|
||||||
|
|
||||||
|
|
||||||
class RapidCreationDefault(models.Model):
|
class RapidCreationDefault(models.Model):
|
||||||
#author = models.OneToOneField(User,
|
#author = models.OneToOneField(User,
|
||||||
author = models.OneToOneField(
|
author = models.OneToOneField(
|
||||||
|
|||||||
@@ -1,12 +0,0 @@
|
|||||||
{% extends "rapids/base.html" %}
|
|
||||||
|
|
||||||
{% block content %}
|
|
||||||
<h2>Add Note</h2>
|
|
||||||
<form action="" method="post">
|
|
||||||
{% csrf_token %}
|
|
||||||
<table>
|
|
||||||
{{ form.as_table }}
|
|
||||||
</table>
|
|
||||||
<input type="submit" value="Submit">
|
|
||||||
</form>
|
|
||||||
{% endblock %}
|
|
||||||
@@ -59,14 +59,6 @@
|
|||||||
|
|
||||||
{% if view_feedback %}
|
{% if view_feedback %}
|
||||||
Notes:
|
Notes:
|
||||||
<ul>
|
|
||||||
{% for note in question.rapid_notes.all %}
|
|
||||||
<li>
|
|
||||||
{{ note.created_on }} by {{ note.author }}: {{ note.note }}
|
|
||||||
</li>
|
|
||||||
{% endfor %}
|
|
||||||
</ul>
|
|
||||||
Anon Notes:
|
|
||||||
<ul class="notes">
|
<ul class="notes">
|
||||||
{% for note in question.anon_notes.all %}
|
{% for note in question.anon_notes.all %}
|
||||||
<li {% if note.complete %}class='complete' {% endif %}>
|
<li {% if note.complete %}class='complete' {% endif %}>
|
||||||
|
|||||||
@@ -121,7 +121,6 @@ urlpatterns = [
|
|||||||
views.RapidUpdate.as_view(),
|
views.RapidUpdate.as_view(),
|
||||||
name="rapid_update",
|
name="rapid_update",
|
||||||
),
|
),
|
||||||
path("<int:pk>/add_note", views.AddNote.as_view(), name="rapid_add_note"),
|
|
||||||
path(
|
path(
|
||||||
"user_answers/",
|
"user_answers/",
|
||||||
views.UserAnswerTableView.as_view(),
|
views.UserAnswerTableView.as_view(),
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ from .forms import (
|
|||||||
RapidForm,
|
RapidForm,
|
||||||
MarkRapidQuestionForm,
|
MarkRapidQuestionForm,
|
||||||
ImageFormSet,
|
ImageFormSet,
|
||||||
NoteForm,
|
|
||||||
RegionForm,
|
RegionForm,
|
||||||
AbnormalityForm,
|
AbnormalityForm,
|
||||||
ExaminationForm,
|
ExaminationForm,
|
||||||
@@ -33,7 +32,6 @@ from .forms import (
|
|||||||
)
|
)
|
||||||
from .models import (
|
from .models import (
|
||||||
Rapid,
|
Rapid,
|
||||||
Note,
|
|
||||||
Abnormality,
|
Abnormality,
|
||||||
Region,
|
Region,
|
||||||
Examination,
|
Examination,
|
||||||
@@ -137,7 +135,6 @@ def question_detail(request, pk):
|
|||||||
):
|
):
|
||||||
view_feedback = True
|
view_feedback = True
|
||||||
|
|
||||||
# logging.debug(rapid.rapid_notes.first())
|
|
||||||
# logging.debug(rapid.subspecialty.first().name.all())
|
# logging.debug(rapid.subspecialty.first().name.all())
|
||||||
return render(
|
return render(
|
||||||
request,
|
request,
|
||||||
@@ -197,7 +194,6 @@ def rapid_split(request, pk):
|
|||||||
# if request.user not in rapid.author.all():
|
# if request.user not in rapid.author.all():
|
||||||
# raise PermissionDenied
|
# raise PermissionDenied
|
||||||
|
|
||||||
# logging.debug(rapid.rapid_notes.first())
|
|
||||||
# logging.debug(rapid.subspecialty.first().name.all())
|
# logging.debug(rapid.subspecialty.first().name.all())
|
||||||
return render(request, "rapids/question_detail.html", {"question": rapid})
|
return render(request, "rapids/question_detail.html", {"question": rapid})
|
||||||
|
|
||||||
@@ -257,37 +253,6 @@ class RapidCreationDefaultView(LoginRequiredMixin, UpdateView):
|
|||||||
# form.instance.author.add(self.request.user.id)
|
# form.instance.author.add(self.request.user.id)
|
||||||
|
|
||||||
|
|
||||||
class AddNote(LoginRequiredMixin, CreateView):
|
|
||||||
model = Note
|
|
||||||
form_class = NoteForm
|
|
||||||
|
|
||||||
# fields = '__all__'
|
|
||||||
# #fields = [ 'condition' ]
|
|
||||||
# #initial = {'date_of_death': '05/01/2018'}
|
|
||||||
# exclude = [ 'created_date', 'published_date' ]
|
|
||||||
def dispatch(self, request, *args, **kwargs):
|
|
||||||
"""
|
|
||||||
Overridden so we can make sure the `Rapid` instance exists
|
|
||||||
before going any further.
|
|
||||||
"""
|
|
||||||
self.pk = get_object_or_404(Rapid, pk=kwargs["pk"])
|
|
||||||
return super().dispatch(request, *args, **kwargs)
|
|
||||||
|
|
||||||
def form_valid(self, form):
|
|
||||||
|
|
||||||
note = form.save(commit=False)
|
|
||||||
|
|
||||||
note.rapid = self.pk
|
|
||||||
|
|
||||||
note.author = self.request.user
|
|
||||||
note.save()
|
|
||||||
|
|
||||||
response = super().form_valid(form)
|
|
||||||
|
|
||||||
return response
|
|
||||||
|
|
||||||
# form.instance.author.add(self.request.user.id)
|
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def rapid_clone(request, pk):
|
def rapid_clone(request, pk):
|
||||||
|
|||||||
Reference in New Issue
Block a user