Я новичок в Django и веб-разработке в целом.У меня есть модель курса в models.py.По сути, я хочу добавить курсы на веб-интерфейс.Я бы использовал POST к серверу.Я просто немного запутался, если я делаю что-то правильно или я что-то упускаю.
Я создал класс AddCourseForm, чтобы попытаться справиться с этим.
models.py
class Course(models.Model):
id = models.AutoField(primary_key=True)
name = CharField(max_length=100)
class Project(models.Model):
id = models.AutoField(primary_key=True)
desc = CharField(max_length=150)
name = CharField(max_length=50)
storyboard_file_path = TextField()
storyboard_completed = BooleanField(default=False)
filming_complete = BooleanField(default=False)
audio_complete = BooleanField(default=False)
production_complete = BooleanField(default=False)
aggregation_complete = BooleanField(default=False)
video_file_path = TextField()
final_review_complete = BooleanField(default=False)
course = models.ForeignKey(Course, on_delete=models.CASCADE, related_name="projects", null=True, blank=True)
serializer.py
class Meta:
model = Project
fields = ('id', 'desc', 'name', 'storyboard_file_path',
'storyboard_completed', 'filming_complete', 'audio_complete',
'production_complete', 'aggregation_complete', 'video_file_path',
'final_review_complete', 'course')
def create(self, validated_data):
instance = self.Meta.model(**validated_data)
instance.save()
return instance
def update(self, instance, validated_data):
for attr, value in validated_data.items():
setattr(instance, attr, value)
instance.save()
return instance
class CouserSerializer(serializers.ModelSerializer):
projects = ProjectSerializer(many=True, read_only=True)
class Meta:
model = Course
fields = ('id', 'name', 'projects')
def create(self, validated_data):
instance = self.Meta.model(**validated_data)
instance.save()
return instance
forms.py
class Meta:
model = Course
fields = [
'name'
]
views.py
queryset = Course.objects.all()
serializer_class = serializers.CouserSerializer
def add_course(request):
if request.POST:
course_form = AddCourseForm(request.POST)
if course_form.is_valid():
new_course_form = course_form.save()
return redirect(new_course_form) #get_absolute_url set on model
else:
return render(request,
'service/add_course.html',
{'course_form': course_form}
)
else:
course_form = AddCourseForm(
initial={'name': ' '}
)
return render(request,
'service/add_course.html',
{'course_form': course_form}
)
urls.py
router = routers.DefaultRouter(trailing_slash=False)
router.register(r'users', views.UserViewSet)
router.register(r'courses', views.CourseViewSet)
router.register(r'focal', views.FocalUserViewSet)
#router.register(r'add_course', views.CourseCreateViewSet)
urlpatterns = [
path(r'api/', include(router.urls)),
path(r'', views.index, name='index')
]
Я чувствую, что у меня все правильно, но я не уверен, как бы я протестировал запрос POST.У меня есть один вопрос: нужно ли мне каким-либо образом обновлять свой urls.py?Я не уверен, как легко протестировать POST-запрос.
Буду признателен за любые рекомендации.