python - 如何将模型的实例传递给Django中的另一个模型?
问题描述
我正在尝试从表单上的父表中填充 dbkey 列,其中输入了外部表值。在提供值时,我收到以下错误 - “csg_ch_servers.DBParentCustomerKey”必须是“csg_ch_customer”实例。有人可以帮我吗?
模型.py
class csg_ch_customer(models.Model):
DBKey=models.AutoField(primary_key=True)
CustomerName=models.CharField(max_length=100,unique=True)
class Meta:
db_table="csg_ch_customer"
def __unicode__(self):
return self.DBKey
def __init__(self):
return self.DBKey
class csg_ch_servers(models.Model):
DBKey=models.AutoField(primary_key=True)
DBParentCustomerKey=models.ForeignKey(csg_ch_customer,on_delete=models.CASCADE)
class Meta:
db_table="csg_ch_servers"
def __str__(self):
return self.DBParentCustomerKey
def __unicode__(self):
return self.DBParentCustomerKey
表格.py
class csg_ch_customer_form(forms.ModelForm):
class Meta:
model = models.csg_ch_customer
fields = "__all__"
class csg_ch_servers_form(forms.ModelForm):
class Meta:
model = models.csg_ch_servers
fields = "__all__"
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['DBParentCustomerKey'].queryset = models.csg_ch_customer.objects.values_list('DBKey', flat=True)
视图.py
def register_ser(request):
form=Aforms.csg_ch_servers_form()
if request.method == "POST":
form=Aforms.csg_ch_servers_form(request.POST)
if form.is_valid():
form.save()
return redirect('Admin/NewServer.html')
else:
return render(request,'Admin/NewServer.html',{'form':form})
return render(request,'Admin/NewServer.html',{'form':form})
解决方案
您的表单需要在您的视图中实例化您的模型。我在您的视图中添加了几个字段,但您需要根据自己的目的对其进行编辑。
这应该尽可能简单。
def register_ser(request,pk):
yourmodel = models.csg_ch_customer.objects.get(pk=pk)
form=Aforms.csg_ch_servers_form(instance=yourmodel)
if request.method == "POST":
form=Aforms.csg_ch_servers_form(request.POST,instance=yourmodel)
if form.is_valid():
form.save()
return redirect('Admin/NewServer.html')
else:
return render(request,'Admin/NewServer.html',{'form':form})
return render(request,'Admin/NewServer.html',{'form':form})
推荐阅读
- jquery - 页面加载 2 秒后更改选择选项
- msbuild - 缺少 Microsoft.VisualStudio.Tools.Office.targets
- javascript - jQuery mobile - 当用户滚动到特定元素时触发事件
- c++ - 函数隐藏和重载的区别
- jquery - 检查元素是否包含特定文本并向不同元素添加新类
- spring - 究竟什么是 server.error.path 属性?
- javascript - 从数组中的 JSON 对象中获取记录
- w2ui - 无法搜索网格中的切换列
- firebase - 如何在 Flutter 中用 Column 或 ListView 类包装 StreamBuilder 类?
- facebook - IBM Watson 个性服务和 Facebook 登录