如何在Django中将一个模型的实例传递给另一个模型?

2024-05-16 06:00:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从表单上的父表填充dbkey列,其中输入外部表值。 在提供一个值时,我得到以下错误-“csg\u chu servers.DBParentCustomerKey”必须是“csg\u chu customer”实例。 有人能帮我吗

model.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

form.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)

views.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})

Tags: selfformtruereturnmodelsrequestdefcustomer
1条回答
网友
1楼 · 发布于 2024-05-16 06:00:14

表单需要在视图中实例化模型。 我在您的视图中添加了几个字段,但您需要出于自己的目的对其进行编辑

这应该尽可能简单

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})

相关问题 更多 >