Как установить соответствующий внешний ключ django в форме

Я хочу представить видео в разделе. Я создал раздел. Когда я хочу создать видео, я хочу установить название курса по умолчанию и показать соответствующий раздел.

Курс

class Course(models.Model):
instructor = models.ForeignKey(UserProfile,on_delete=models.CASCADE) 
name = models.CharField(max_length = 50 , null = False,unique = True)
slug = models.CharField(max_length = 50 , null = False , unique = True)

Секция:

class SectionVideo(models.Model):
course = models.ForeignKey(Course , null = False , on_delete=models.CASCADE)
name = models.CharField(max_length = 50 , null = False)
slug = models.CharField(max_length = 50 , null = False )
serial_number = models.IntegerField(null=False)

видео:

class Video(models.Model):
section_video = models.ForeignKey(SectionVideo , null = False , on_delete = models.CASCADE)
course = models.ForeignKey(Course , null = False , on_delete = models.CASCADE)
title  = models.CharField(max_length = 100 , null = False)
video_description = models.CharField(max_length = 500 , null = True)

как я сделаю свою форму для создания видео.

Вам нужно получить курс(id) и раздел(id) от пользователя.

Вариант 1. Пользователь может выбрать курс и раздел в формах.

forms.py

from django.forms import ModelForm
from .models import Course, SectionVideo, Video

class VideoForm(ModelForm):
    class Meta:
        model = Video
        fields = ['section_video', 'course', 'title', 'video_description']

views.py

from django.shortcuts import render

# Create your views here.
from .models import Course, SectionVideo, Video
from .forms import VideoForm
from django.forms import modelform_factory

# Create your views here.
def index(request):
    # Both forms are functionally identical.
    form = modelform_factory(Video, fields=('section_video', 'course', 'title', 'video_description'))
    # form = VideoForm()
    return render(request, 'templates/form.html', {'form': form})

Вариант 2. Получение курса(id) и раздела(id) через процесс создания видео, и присвоение этих параметров форме с помощью initial

urls.py

Если вы получаете параметры из запроса, вам не нужен urls.py.

from django.contrib import admin
from django.urls import path

from zayed import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('zayed/<int:course_id>/<int:section_video_id>/', views.index, name='index'),
]

views.py

from django.shortcuts import render

# Create your views here.
from .models import Course, SectionVideo, Video
from .forms import VideoForm

# Create your views here.
def index(request, course_id, section_video_id):
    form = VideoForm(initial={'course':course_id, 'section_video': section_video_id})
    return render(request, 'templates/form.html', {'form': form})
Вернуться на верх