将用户 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)
我的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)