Как установить соответствующий внешний ключ 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})