Сохраняя Django, получая "Этот выбор не один из доступных вариантов" - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь сохранить форму, в которой есть ForeignKey (purchaseContractID). Вот мой контракт Модель

class contracts(models.Model):
    productDetailID=models.ForeignKey('Inventory.productDetails',related_name='+',on_delete=models.CASCADE,verbose_name='Select Product',default=None)
    supplierID=models.ForeignKey(suppliers,on_delete=models.CASCADE,verbose_name='Select Supplier',default=None)
    totalUnits=models.IntegerField(verbose_name='Total Units',editable=False,default=None)
    ratePerUnit=models.IntegerField(verbose_name='Rate Per Unit',default=None)
    saleTax=models.IntegerField(verbose_name='Sale Tax',default=None)
    incomeTax=models.IntegerField(verbose_name='Income Tax',default=None)
    saleTaxwithHeld=models.IntegerField(verbose_name='Sale Tax with Held',default=None)
    startDate=models.DateField(verbose_name='Start Date',default=None)
    endDate=models.DateField(verbose_name='End Date',default=None)
    manulContractNumber=models.IntegerField(verbose_name='Manul Contract Number',default=None)
    paymentDays=models.IntegerField(verbose_name='Payment Days',default=None)
    remarks=models.CharField(verbose_name='Remarks',max_length=100,default=None)
    dateOfEntry=models.DateField(editable=False,default=datetime.now())

    def __str__(self):
        return str(self.productDetailID.name)

Вот мой инвентарь в модели, в которой иностранный ключ BuyContract

class inventoryIn(models.Model):


    supplierID=models.ForeignKey('Purchase.suppliers',editable=False,on_delete=models.CASCADE,verbose_name='Supplier')
    productID=models.ForeignKey(products,editable=False,on_delete=models.CASCADE)
    purchaseContractID=models.ForeignKey('Purchase.contracts',on_delete=models.CASCADE,verbose_name='Contract ID')
    unitsIn=models.IntegerField(verbose_name='Enter No of Bags')
    MYCHOCIES = (('orginal', 'ORGINAL'), ('dummy', 'DUMMY'))
    doType = models.CharField(blank=True, choices=MYCHOCIES, verbose_name='Select DO Type', max_length=20)
    doID=models.IntegerField(verbose_name='Do No')
    doImage=models.ImageField(upload_to='doImage/%Y/%m/%d',verbose_name='Do Image')
    invoiceID=models.IntegerField(verbose_name='Invoice No')
    invoiceImage=models.ImageField(upload_to='inventoryIn/%Y/%m/%d')
    agingDate=models.DateField(verbose_name='Receiving Date')
    labReportImage = models.ImageField(upload_to='labReportImage/%Y/%m/%d', blank=True,verbose_name='Lab Report Image')
    enterPaymentDays = models.IntegerField(verbose_name='Enter Payment Days', blank=True, default=None)
    dateOfEntry=models.DateField(default=datetime.now())
    def __str__(self):
        return self.supplierID

здесьмой admin.py, где я добавляю форму администратора, а также добавляю js, который добавляет некоторые поля динамически.выбор не один из доступных вариантов ".enter image description here

1 Ответ

0 голосов
/ 21 февраля 2019

Я решил эту проблему, добавив метод сохранения в InventoryIn Model.

class inventoryIn(models.Model):


    supplierID=models.ForeignKey('Purchase.suppliers',editable=False,on_delete=models.CASCADE,verbose_name='Supplier')
    productID=models.ForeignKey(products,editable=False,on_delete=models.CASCADE)
    purchaseContractID=models.ForeignKey('Purchase.contracts',on_delete=models.CASCADE,verbose_name='Contract ID')
    unitsIn=models.IntegerField(verbose_name='Enter No of Bags')
    MYCHOCIES = (('orginal', 'ORGINAL'), ('dummy', 'DUMMY'))
    doType = models.CharField(blank=True, choices=MYCHOCIES, verbose_name='Select DO Type', max_length=20)
    doID=models.IntegerField(verbose_name='Do No')
    doImage=models.ImageField(upload_to='doImage/%Y/%m/%d',verbose_name='Do Image')
    invoiceID=models.IntegerField(verbose_name='Invoice No')
    invoiceImage=models.ImageField(upload_to='inventoryIn/%Y/%m/%d')
    agingDate=models.DateField(verbose_name='Receiving Date')
    labReportImage = models.ImageField(upload_to='labReportImage/%Y/%m/%d', blank=True,verbose_name='Lab Report Image')
    enterPaymentDays = models.IntegerField(verbose_name='Enter Payment Days', blank=True, default=None)
    dateOfEntry=models.DateField(default=datetime.now())
    def __str__(self):
        return str(self.supplierID)
    def save(self, force_insert=False, force_update=False, using=None,
             update_fields=None):
        from Purchase.models import contracts,suppliers
        contract = contracts.objects.values('supplierID', 'productDetailID').filter(id=self.purchaseContractID.id)
        supplier=contract[0].get("supplierID")
        product=contract[0].get("productDetailID")

        self.supplierID=suppliers.objects.get(id=supplier)
        self.productID=products.objects.get(productDetailsID=product)
        super(inventoryIn,self).save()

, и я также сделал два поля editable = False

supplierID=models.ForeignKey('Purchase.suppliers',editable=False,on_delete=models.CASCADE,verbose_name='Supplier')
    productID=models.ForeignKey(products,editable=False,on_delete=models.CASCADE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...