Как сохранить значения формы (внешний ключ) в базе данных в представлениях на основе классов с несколькими базами данных в Django - PullRequest
0 голосов
/ 31 октября 2018

В django я использую несколько баз данных, и имя одной из них - «virtual». Virtual не является базой данных по умолчанию После отправки клиентской формы отображается следующая ошибка

Невозможно назначить «30001»: «FT_CLIENT_IP_DETAILS.iMasterID» должен быть экземпляром «CLIENT_MASTER».

Я думаю, что ошибка связана с внешними ключами. Здесь 30001 является внешним ключом в FT_CLIENT_IP_DETAILS

в models.py

class FT_CLIENT_ACCOUNTS_MASTER(models.Model):  
    iClientaccID = models.AutoField(primary_key=True)
class CLIENT_MASTER(models.Model):
    iMasterID = models.AutoField(primary_key=True)

class FT_CLIENT_IP_DETAILS(models.Model):
    iSno = models.AutoField(primary_key=True)
    iMasterID = models.ForeignKey(CLIENT_MASTER,on_delete=models.CASCADE,
               default='',db_column='iMasterID')
    iClientAccID =models.ForeignKey(FT_CLIENT_ACCOUNTS_MASTER,
               on_delete=models.CASCADE,default='',db_column='iClientAccID')     
    vcClientIP=models.CharField(max_length=16,default=0)        
    class Meta:
        db_table='FT_CLIENT_IP_DETAILS'

в forms.py

class Clientipform(forms.ModelForm):
    Masterchoice=[("","All")]
    Accountchoice=[("","All")]


    iMasterID=forms.ChoiceField(label="Master",choices=Masterchoice+[ 
              (o.iMasterID, str(o.vcClientName)) for o in 
              CLIENT_MASTER.objects.using('virtual').all()],error_messages= 
              {'required': 'Master is required' }) 
    iClientAccID=forms.ChoiceField(label="Account",choices=Masterchoice+[ 
                 (o.iClientaccID, str(o.vcSystemID)) for o in 
                 FT_CLIENT_ACCOUNTS_MASTER.objects.using('virtual').all()],
                 error_messages={'required': 'Account is required' })
    vcClientIP=forms.CharField(label="IP(s)",widget=forms.Textarea,
               error_messages={'required': 'Account is required' })
    class Meta:
        model=FT_CLIENT_IP_DETAILS
        fields = ['iMasterID','iClientAccID','vcClientIP']

в views.py

class AddIP(CreateView):    
    template_name = 'clientip/client_ip_dropdown.html'

    form_class = Clientipform

    def form_valid(self,form):

        model = form.save(commit=False)
        model.save(using='virtual')
        return HttpResponseRedirect(reverse('clientip:home'))
        success_url = reverse('clientip:home')
...