django - 如何保存我的 ForeignKey 的属性?
问题描述
我正在尝试创建一个视图,允许用户在我的课程模型中上传他们的文档。但是,当文件上传时,我无法保存提交表单的实例。当我访问管理页面时,我的 ForeignKey 字段为空。
这是用户提交文件的views.py:
class UploadLessonView(CreateView):
model = Lesson
fields = ['title', 'file']
template_name = 'store/upload_lesson.html'
success_url = '../'
def form_valid(self, form):
form.instance.author = self.request.user
return super(UploadLessonView, self).form_valid(form)
这是我的子模型的 models.py:
class Lesson(models.Model):
title = models.CharField(max_length=100)
file = models.FileField(upload_to="lesson/pdf")
date_posted = models.DateTimeField(default=timezone.now)
post = models.ForeignKey(Post, on_delete=models.CASCADE, null=True, blank=True)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('lesson_upload', kwargs={'pk': self.pk})
对于我的父模型:
class Post(models.Model):
title = models.CharField(max_length=100)
image = models.ImageField(default = 'default0.jpg', upload_to='course_image/')
description = models.TextField()
price = models.DecimalField(decimal_places=2, max_digits=6)
date_posted = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE)
rating = models.IntegerField(default = 0)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('post-detail', kwargs={'pk' : self.pk})
提交文件时,Post 字段为空。
解决方案
您没有在视图中设置Post
对象Lesson
。因此,您可以通过两种方式修复它。
一种方法是通过 url 发送它,例如:
# url
url('lesson/<int:post_id>/create/', UploadLessionView.as_view())
并使用post_id
视图中的值:
class UploadLessonView(CreateView):
model = Lesson
fields = ['title', 'file']
template_name = 'store/upload_lesson.html'
success_url = '../'
def form_valid(self, form):
form.instance.post = get_object_or_404(Post, pk=self.kwargs.get('post_id'))
return super(UploadLessonView, self).form_valid(form)
二、可以post
在字段中添加:
class UploadLessonView(CreateView):
model = Lesson
fields = ['title', 'file', 'post'] # <-- Here
template_name = 'store/upload_lesson.html'
推荐阅读
- angular - 将 Angular 8 迁移到 Angular 9
- html - Uppy 控件在状态更改时删除上传的文件
- css - 我只想将背景图像应用于一个组件的主体
- parsing - 方案/球拍:语法解析器匹配混淆
- java - 在片段中显示 RecyclerView
- node.js - 如何从 Node JS 客户端的响应中读取和保存 pdf 文件
- python - 如何在 scikit learn 中为多变量回归绘制最佳拟合平面?
- java - 如何在java中读取小数形式的jsonobjects?
- java - 迭代时移除元素。removeIf 导致 ConcurrentModificationException
- r - 如何在 R Markdown 的表格正文中显示希腊字母?