美文网首页
ModelForm表单 重写初始化方法

ModelForm表单 重写初始化方法

作者: 叶田的学习笔记 | 来源:发表于2018-10-17 15:28 被阅读0次

一个Course下有N个Lesson
功能需求:每个用户只能看到自己所设置的Course。

models.py

from django.db import models
from django.contrib.auth.models import User

class Course(models.Model):    
    user = models.ForeignKey(User,on_delete=models.CASCADE,related_name='course_user')
    title = models.CharField(max_length=200)
    overview = models.TextField()

class Lesson(models.Model):
    user = models.ForeignKey(User,on_delete=models.CASCADE,related_name='lesson_user')
    course = models.ForeignKey(Course,on_delete=models.CASCADE,related_name='lesson')
    title = models.CharField(max_length=200)
    video = models.FileField(upload_to=user_directory_path)    
    description = models.TextField(blank=True)
    created = models.DateTimeField(auto_now_add=True)

forms.py

from django import forms
from .models import Course,Lesson

class CreateLessonForm(forms.ModelForm):
    class Meta:
        model = Lesson
        fields = ['course','title','video','description','attach']
 
    def __init__(self,user,*args,**kwargs):                
        super(CreateLessonForm,self).__init__(*args,**kwargs)    # 先调用父类初始化方法
        self.fields['course'].queryset = Course.objects.filter(user=user)     # 注意这里的queryset

重写_init_()初始化方法,让每个用户只能看到自己所设置的课程标题。
如果没有重写,则是按照fields中的声明,会列出所有用户创建的course。
通过user参数传入当前用户,筛选出当前用户的course值。

相关文章

  • ModelForm表单 重写初始化方法

    一个Course下有N个Lesson功能需求:每个用户只能看到自己所设置的Course。 models.py fo...

  • swift - 自定义view

    继承自uiview 重写初始化方法 重写布局方法

  • Forms#3

    ModelForm 以已创建的model为原型创建表单时可以继承forms.ModelForm大多数model的字...

  • Django ModelForm and Form

    django表单系统中,所有的表单类都作为django.forms.Form的子类创建,包括ModelForm 关...

  • 5.3 django 表单 ModelForm

    ModelForm: 大家在写表单的时候,会发现表单中的Field和模型中的Field基本上是一模一样的,而且表单...

  • 最浅显易懂的Django系列教程(36)-ModelForm

    ModelForm: 大家在写表单的时候,会发现表单中的Field和模型中的Field基本上是一模一样的,而且表单...

  • Vue子组件初始化

    场景:每次提交完表单之后,第二次打开表单初始化。 方法一:可以调用form表单的重置方法;方法二:可以给弹窗组件添...

  • 便捷初始化器和指定初始化器

    1、自定义初始化方法要先调用自己类默认初始化方法,自己重写默认初始化方法要先调用父类默认初始化方法2、应该要先调用...

  • Servlet开发之继承HttpServlet

    继承HttpServlet 需要重写doGet()、doPost()方法**表单提交数据使用get和post请求的...

  • iOS 重写方法中 super调用的时机

    参考文档:47.重写方法中 super调用的时机 当你重写的方法是加载或者初始化的方法时, 你要先调用 super...

网友评论

      本文标题:ModelForm表单 重写初始化方法

      本文链接:https://www.haomeiwen.com/subject/jvkrzftx.html