Поле 'id' ожидало число, но получило "The Complete JavaScript", когда я пытаюсь создать курс, я получаю эту ошибку
Вот моя модель курса.
class Course(models.Model):
owner = models.ForeignKey(settings.AUTH_USER_MODEL,\
related_name='courses_created', on_delete=models.CASCADE)
subject = models.ForeignKey(Subject,related_name='courses', on_delete=models.CASCADE)
title = models.CharField(max_length=200)
pic = models.ImageField(upload_to="course_pictures")
slug = models.SlugField(max_length=200, unique=True,blank=True)
overview = models.TextField()
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
enroll = models.ManyToManyField(settings.AUTH_USER_MODEL,related_name='enrollment',blank=True)
class Module(models.Model):
course = models.ForeignKey(Course, related_name='modules', \
on_delete=models.CASCADE)
title = models.CharField(max_length=200)
description = models.TextField(blank=True)
order = OrderField(blank=True, for_fields=['course'])
class Meta:
ordering = ['course']
class Content(models.Model):
module = models.ForeignKey(Module,related_name='contents', on_delete=models.CASCADE)
content_type = models.ForeignKey(ContentType,on_delete=models.CASCADE,\
limit_choices_to={'model__in':('text',
'video','image','file')})
object_id = models.PositiveIntegerField()
item = GenericForeignKey('content_type', 'object_id')
order = OrderField(blank=True, for_fields=['module'])
Вот моя функция базового представления для создания курса, Когда я пытаюсь сделать пост запрос для создания курса django бросает кроме ValueError Поле 'id' ожидалось число, но получил 'The Complete JavaScript'. Мне интересно, откуда берется эта ошибка, может ли кто-нибудь помочь.
def course_create(request,*args,**kwargs):
id = kwargs.get('id')
if request.method =="POST":
subject = request.POST['title']
course = request.POST['title']
overview = request.POST['overview']
front_pic = request.POST['pic']
title = request.POST['title']
desc = request.FILES.get('description')
owner = Account.objects.get(username=request.user.username)
course,create = Course.objects.get_or_create(title=course,
owner=owner,
subject=subject)
subject,create = Subject.objects.get_or_create(title=subject)
module,create = Module.objects.get_or_create(course=course,
description=desc,
title=title,
order=id)
data = Course(owner=owner,
title=course,
subject=subject,
pic=front_pic,
desc=desc,
overview=overview,
order=id,
module=module.id)
data.save()
return redirect('course:main')
return render(request,'manage/module/formset.html')
Вот fields.py для фильтрации и поддержания порядка в моделях.
class OrderField(models.PositiveIntegerField):
def __init__(self ,for_fields=None, *args, **kwargs):
self.for_fields = for_fields
super(OrderField, self).__init__(*args,**kwargs)
def pre_save(self, model_instance, add):
if getattr(model_instance, self.attname) is None:
# no current value
try:
qs = self.model.objects.all()
if self.for_fields:
#filter by objects with the same field values
# for the fields in for_filds
query ={field:getattr(model_instance, field)\
for field in self.for_fields}
qs = qs.filter(**query)
# get the order of the last item
last_item = qs.latest(self.attname)
value = last_item.order + 1
except ObjectDoesNotExist:
value = 0
setattr(model_instance, self.attname, value)
return value
else:
return super(OrderField, self).pre_save(model_instance, add)