Как передать экземпляр модели в другую модель в Django? - PullRequest
0 голосов
/ 23 января 2020

Я пытаюсь заполнить столбец dbkey из родительской таблицы в форме, где вводятся значения сторонних таблиц. При предоставлении значения я получаю следующую ошибку - «csg_ch_servers.DBParentCustomerKey» должен быть экземпляром «csg_ch_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)

просмотров. 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})

1 Ответ

0 голосов
/ 24 января 2020

Ваша форма должна отражать вашу модель в ваших представлениях. Я добавил несколько полей для вашего просмотра, но вам нужно отредактировать его для своих собственных целей.

Это должно быть как можно проще.

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})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...