Skip to content

Commit e9058ac

Browse files
authored
Merge pull request #1 from Ahmad1551/HA-Assignment
Assignment crud
2 parents a202f15 + 26d1c62 commit e9058ac

15 files changed

+105
-1
lines changed
-8 Bytes
Binary file not shown.
-14 Bytes
Binary file not shown.
-14 Bytes
Binary file not shown.
-14 Bytes
Binary file not shown.
-14 Bytes
Binary file not shown.
-14 Bytes
Binary file not shown.

edu/admin.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from django.contrib import admin
22

3-
from edu.models import Bot
3+
from edu.models import Bot, Assignment
44

55
admin.site.register(Bot)
6+
admin.site.register(Assignment)

edu/migrations/0005_assignment.py

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# Generated by Django 4.0.6 on 2022-11-07 08:56
2+
3+
from django.conf import settings
4+
from django.db import migrations, models
5+
import django.db.models.deletion
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
dependencies = [
11+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
12+
('edu', '0004_remove_subscription_organization_and_more'),
13+
]
14+
15+
operations = [
16+
migrations.CreateModel(
17+
name='Assignment',
18+
fields=[
19+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
20+
('created_at', models.DateTimeField(auto_now_add=True)),
21+
('updated_at', models.DateTimeField(auto_now=True)),
22+
('name', models.CharField(blank=True, max_length=255, null=True)),
23+
('image', models.ImageField(blank=True, null=True, upload_to='assignment_images')),
24+
('price', models.PositiveIntegerField(blank=True, default=0, null=True)),
25+
('upload_file', models.FileField(blank=True, null=True, upload_to='ask_assignments')),
26+
('question_text', models.TextField(blank=True, null=True)),
27+
('deadline', models.DateTimeField(blank=True, null=True)),
28+
('status', models.BooleanField(default=False)),
29+
('description', models.TextField(blank=True, null=True)),
30+
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
31+
],
32+
options={
33+
'abstract': False,
34+
},
35+
),
36+
]

edu/models.py

+20
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,23 @@ class Subscription(TimeStampedModel):
4444

4545
def __str__(self):
4646
return f'{self.bot} - {self.organization}'
47+
48+
49+
class Assignment(TimeStampedModel):
50+
user = models.ForeignKey('core.User', on_delete=models.CASCADE)
51+
52+
name = models.CharField(max_length=255, null=True, blank=True)
53+
image = models.ImageField(blank=True, null=True, upload_to='assignment_images')
54+
price = models.PositiveIntegerField(default=0, blank=True, null=True)
55+
upload_file = models.FileField(upload_to='ask_assignments', null=True, blank=True)
56+
question_text = models.TextField(blank=True, null=True)
57+
deadline = models.DateTimeField(blank=True, null=True)
58+
status = models.BooleanField(default=False)
59+
description = models.TextField(null=True, blank=True)
60+
61+
def __str__(self):
62+
return self.name
63+
64+
65+
66+

edu/templates/edu/assignment_confirm_delete.html

Whitespace-only changes.

edu/templates/edu/assignment_detail.html

Whitespace-only changes.

edu/templates/edu/assignment_form.html

Whitespace-only changes.

edu/templates/edu/assignment_list.html

Whitespace-only changes.

edu/urls.py

+10
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@
66
from edu.views.plan import PlanCreateView, PlanDeleteView, PlanDetailView, PlanListView, PlanUpdateView
77
from edu.views.subscription import (SubscriptionCreateView, SubscriptionDeleteView, SubscriptionDetailView,
88
SubscriptionListView, SubscriptionUpdateView)
9+
from edu.views.assignment import (
10+
AssignmentCreateView, AssignmentDeleteView, AssignmentDetailView, AssignmentListView, AssignmentUpdateView
11+
)
12+
913

1014
urlpatterns = [
1115
path('chegg/', CheggView.as_view(), name='chegg_view'),
@@ -24,4 +28,10 @@
2428
path('subscription/<int:pk>/', SubscriptionDetailView.as_view(), name='subscription_detail_view'),
2529
path('subscription/<int:pk>/update/', SubscriptionUpdateView.as_view(), name='subscription_update_view'),
2630
path('subscription/<int:pk>/delete/', SubscriptionDeleteView.as_view(), name='subscription_delete_view'),
31+
path('assignments/', AssignmentListView.as_view(), name='assignment_list_view'),
32+
path('assignment/create/', AssignmentCreateView.as_view(), name='assignment_create_view'),
33+
path('assignment/<int:pk>/', AssignmentDetailView.as_view(), name='assignment_detail_view'),
34+
path('assignment/<int:pk>/update/', AssignmentUpdateView.as_view(), name='assignment_update_view'),
35+
path('assignment/<int:pk>/delete/', AssignmentDeleteView.as_view(), name='assignment_delete_view'),
36+
2737
]

edu/views/assignment.py

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
from django.urls import reverse_lazy
2+
from django.views import View
3+
from django.views.generic import CreateView, DeleteView, DetailView, ListView, UpdateView
4+
5+
from config.mixins import PermissionRequiredMixin
6+
from config.settings import DEFAULT_PAGINATION_SIZE
7+
8+
from edu.models import Assignment
9+
10+
11+
class AssignmentBaseView(PermissionRequiredMixin, View):
12+
model = Assignment
13+
fields = '__all__'
14+
success_url = reverse_lazy('assignment_list_view')
15+
16+
17+
class AssignmentListView(AssignmentBaseView, ListView):
18+
paginate_by = DEFAULT_PAGINATION_SIZE
19+
20+
21+
class AssignmentCreateView(AssignmentBaseView, CreateView):
22+
model = Assignment
23+
success_url = reverse_lazy('assignment_list_view')
24+
25+
26+
class AssignmentDetailView(AssignmentBaseView, DetailView):
27+
permission_required = 'edu.view_plan'
28+
29+
30+
class AssignmentUpdateView(AssignmentBaseView, UpdateView):
31+
model = Assignment
32+
success_url = reverse_lazy('assignment_list_view')
33+
34+
35+
36+
class AssignmentDeleteView(AssignmentBaseView, DeleteView):
37+
"""Plan delete view."""

0 commit comments

Comments
 (0)