将用户 ID 关联到用户创建的课程

Associating user id to courses that the user create

我的django 项目基本上允许用户创建自己的课程。因此,我试图将用户 ID 与用户创建的课程相关联,以便在用户想要查看 he/she 已创建的所有课程时仅显示用户已创建的课程。但是,它 returns 一条错误提示“无法分配“1”:“Course.user_id_id”必须是一个“用户”实例。”。几天来我一直在努力寻找解决方案,但始终找不到答案。

models.py

class Users(models.Model):
    user=models.OneToOneField(User,on_delete=models.CASCADE)
    profile_pic= models.ImageField(upload_to='media/profile_pic',null=True,blank=True)
    address = models.CharField(max_length=40)
    mobile = models.CharField(max_length=20,null=False)
    Country = models.CharField(max_length=20,null=False, blank=True)
    Company = models.CharField(max_length=20,null=False, blank=True)
    City =  models.CharField(max_length=20,null=False, blank=True)
    State =  models.CharField(max_length=20,null=False, blank=True)
    Zip_Code =  models.IntegerField(blank=True, default="1")
    Telephone =  models.IntegerField(blank=True, default="1")
    Extension =  models.CharField(max_length=20,null=False, blank=True)
    @property
    def get_name(self):
        return self.user.first_name+" "+self.user.last_name
    @property
    def get_id(self):
        return self.user.id
    def __str__(self):
        return self.user.first_name

class Course(models.Model):
    CATEGORY = (
                ('IT & Software', 'IT & Software'),
                ('Mathematics', 'Mathematics'),
                ('Science', 'Science'),
                ('English', 'English'),
                ('Bahasa Melayu', 'Bahasa Melayu'),
                )

    LEVEL = (
            ('Easy', 'Easy'),
            ('Intermediate', 'Intermediate'),
            ('Advanced', 'Advanced'),
            )

    LANGUAGE = (
               ('English', 'English'),
               ('Bahasa Malaysia', 'Bahasa Malaysia'),
               ('Chineese', 'Chineese'),
               )

    CERTIFICATE = (
                  ('Yes', 'Yes'),
                  ('No', 'No'),
                  )
    user_id_id = models.ForeignKey(User, on_delete = models.CASCADE)
    media = models.ImageField(upload_to = 'media/course')
    title = models.CharField(max_length=300, null = False)
    subtitle = models.CharField(max_length=500, null = False)
    description = models.CharField(max_length=5000, null = False)
    language = models.CharField(max_length=20, null = False, choices=LANGUAGE)
    level = models.CharField(max_length=20, null = False, choices=LEVEL)
    category = models.CharField(max_length=30, null = False, choices=CATEGORY)
    subcategory = models.CharField(max_length=20, null = False)
    price = models.FloatField(null = True)
    roles_responsibilities = models.CharField(max_length=2500, null = False)
    timeline_budget = models.CharField(max_length=250, null = False)
    req_prerequisite = models.CharField(max_length=2500, null = False)
    certificate = models.CharField(max_length=5, null = False, choices=CERTIFICATE)
    slug = AutoSlugField(populate_from='title', max_length=500, unique=True, null=True)

    def __str__(self):
        return self.title

views.py

def createCourse(request):
    user = request.user
    print(user)
    form = CourseForm()
    if request.method == 'POST':
        form = CourseForm(request.POST or None, request.FILES)
        if form.is_valid():
            course = form.save(commit=False)
            course.user_id_id = user.id
            course.save()
            messages.success(request, "Course was successfully created!")
            print('success!')
            return redirect('viewcourse')
        else:
            print('fail')
            messages.error(request, "Please correct the error below!")
    context = { 'form': form }
    return render(request, 'courses/create_course.html', context)

def viewCourse(request):
    user_id = request.user
    user_id = user_id.id
    courses = Course.objects.filter(user_id_id = user_id)
    context = { 'courses': courses }
    print(courses)
    return render(request, 'courses/view_courses.html', context)

它需要一个 User 实例。你需要

course.user_id_id = user

course.user_id_id_id = user.id   # eeek!

您真的需要更改该名称! Django 惯例是

class Course(models.Model):
    ...
    user = models.ForeignKey(User, on_delete = models.CASCADE)

然后

course.user_id = user.id     # makes sense

您必须执行类似这样的操作才能获取用户的课程:

from .models import User 

def viewCourse(request):
    user_id = User.objects.get(user=request.user)
    courses = Course.objects.filter(user_id_id = user_id)
    context = { 'courses': courses }
    print(courses)
    return render(request, 'courses/view_courses.html', context)