django - 基于类的视图中的外键分配
问题描述
基本上我有一个“节点”详细信息页面,我需要从中分配一个新驱动器(对于这个给定的节点 - 它们需要链接)。问题是为 DriveModelForm 链接“节点”,需要在视图中分配。怎么了?所有的细节都在下面。
网址:
urlpatterns = [
path('<int:pk>/drivecreate/', DriveCreateView.as_view(), name='drive-create')
]
看法:
class DriveCreateView(CreateView):
template_name = 'create_drive.html'
form_class = DriveModelForm
def get_success_url(self):
return reverse('nodes:node-detail')
def form_valid(self, form):
drive = form.save(commit=False)
drive.node = self.kwargs['pk']
drive.save()
return super(DriveCreateView, self).form_valid(form)
模型:
class Drive(models.Model):
manufacture = models.CharField(max_length=32)
model = models.CharField(max_length=32)
drive_type = models.CharField(max_length=32)
capacity = models.IntegerField(default=0)
node = models.ForeignKey(Node, on_delete=models.CASCADE)
class Node(models.Model):
name = models.CharField(max_length=32)
... many more ...
形式:
class DriveModelForm(forms.ModelForm):
class Meta:
model = Drive
fields = (
'manufacture',
'model',
'drive_type',
'capacity',
)
错误: 无法分配“1”:“Drive.node”必须是“节点”实例。
解决方案
视图应稍作调整并引用 Node 并链接到 id。
def form_valid(self, form):
drive = form.save(commit=False)
drive.node = **Node.objects.get(id=self.kwargs['pk'])**
drive.save()
return super(DriveCreateView, self).form_valid(form)
推荐阅读
- mysql - 无法在 FK 列中插入 NULL 值
- python - _imagingft c 模块未安装 amazon linux elasticbeanstalk
- javascript - 使用 JavaScript 在 Selenium 中执行 JavaScript 代码
- swift - Xcode 13.0 中的模棱两可的布局警告
- php - 如何在 laravel 中显示旧的 datetime-local 值?
- sql - 在主表中生成虚拟列
- mysql - 如何为重新测试记录创建模式?
- python - 在 PyTorch 中计算加权平均值
- c++ - OpenCV C++ 中的位移
- javascript - Mongoose Model.Create 和 Model.Update 另一个