как добавить одну форму для двух моделей Django - PullRequest
0 голосов
/ 12 февраля 2019

Я прочитал об объектах InlineModelAdmin и попытался реализовать это.В основном у меня есть две модели соответственно контрактов и контрактов.

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

class contractDetails(models.Model):
    contractID=models.ForeignKey(contracts,on_delete=models.CASCADE,verbose_name='Select Contract')
    weightPerBag=models.IntegerField(verbose_name='Weight Per Bag')
    conesPerBag=models.IntegerField(verbose_name='Cones Per Bag')
    weightPerCone=models.IntegerField(verbose_name='Weight Per Cone')
    noOfBags=models.IntegerField(verbose_name='No of Bags')
    noOfAdditional=models.IntegerField(verbose_name='No of Additional Cones') 

ContractDetails имеет contractID как foregnkey.Теперь я попытался создать одну форму из этих двух моделей, используя InlineModelAdmin.

from django.contrib import admin
from Purchase.models import suppliers,Contacts,contracts,contractDetails


class contractsInline(admin.TabularInline):
    model = contracts

class contractsdetailsInline(admin.TabularInline):
    model = contractDetails



class contractsAdmin(admin.ModelAdmin):
    inlines = [
        contractsInline,
        contractsdetailsInline
    ]
# Register your models here.

admin.site.register(suppliers)
admin.site.register(Contacts)
admin.site.register(contracts,contractDetails)
admin.site.register(contractsAdmin)

Но всегда возвращалось сообщение об ошибке, когда я пытался перенести ее

TypeError: объект 'MediaDefiningClass'не повторяется

1 Ответ

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

Я ошибся при регистрации.Я должен зарегистрировать сначала модель контрактов, а затем контрактыAdmin modelAdmin.

from django.contrib import admin
from Purchase.models import suppliers,Contacts,contracts,contractDetails





admin.site.register(suppliers)
admin.site.register(Contacts)
class contractDetailsInline(admin.TabularInline):
    model = contractDetails
    extra = 1
    fields = ["weightPerBag", "conesPerBag", "weightPerCone", 'noOfBags','noOfAdditional']

class contractsAdmin(admin.ModelAdmin):
    save_on_top = True
    fields = ["productDetailID",'supplierID','saleTax','incomeTax','saleTaxwithHeld','startDate','endDate','manulContractNumber','paymentDays','remarks']
    inlines = [contractDetailsInline,]
# Register your models here.


admin.site.register(contracts,contractsAdmin)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...