Как успешно обработать POST-запрос в Django - PullRequest
0 голосов
/ 29 апреля 2019

Я новичок в 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-запрос.

Буду признателен за любые рекомендации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...