Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 自定义无重复的内联外键_Python_Django_Django Forms - Fatal编程技术网

Python 自定义无重复的内联外键

Python 自定义无重复的内联外键,python,django,django-forms,Python,Django,Django Forms,我有这些模型: models.py 创建报价时,我可以添加任意数量的ProductOfferDoc,因为这是一个外键,但我不希望允许多次插入相同的ProductOfferDoc。在哪里可以对表单进行这些控制?您可以使用: 您可以在ProductOfferDoc.offer外键上添加unique=True参数,但您的体系结构似乎是错误的-如果Product只能有一个ProductOfferDoc,为什么不颠倒关系,然后添加Product.doc=models.ForeignKey(ProductO

我有这些模型:

models.py 创建报价时,我可以添加任意数量的
ProductOfferDoc
,因为这是一个外键,但我不希望允许多次插入相同的
ProductOfferDoc
。在哪里可以对表单进行这些控制?

您可以使用:


您可以在
ProductOfferDoc.offer
外键上添加
unique=True
参数,但您的体系结构似乎是错误的-如果
Product
只能有一个
ProductOfferDoc
,为什么不颠倒关系,然后添加
Product.doc=models.ForeignKey(ProductOfferDoc)
field?@Ianizz我需要保存更多ProductOfferDoc,但是当我编写表单时,我不能重复相同的ProductOfferDoc实例。。
class Offer(BaseModel):
    code =  models.CharField(_("Codice Offerta"), max_length=16, blank=False, null=False, default=0, editable=False)
    company = models.ForeignKey(Company, verbose_name=_('Azienda'), related_name='company')
    outcome = models.CharField(_('Esito Offerta'), choices=OUTCOME, max_length=64, blank=True, null=True)
    user = models.CharField(_("Inserita da"), max_length=64, blank=False, null=True)

class Product(BaseModel):
    name = models.CharField(_("Nome Prodotto"),max_length=1024, blank = False, null=True)
    category = models.CharField(_("Categoria"),max_length=1024, blank = False, null=True, choices=CATEGORY)

class ProductOfferDoc(BaseModel):
    product = models.CharField(max_length=1024, blank=False,null=False, choices=DOC)
    number = models.IntegerField(_('Num.'), default=0, blank=True, null=True)
    price = models.DecimalField(_('Prezzo'),max_digits=10, decimal_places=2,default=0.00,blank=True, null=True )
    offer = models.ForeignKey(Offer, related_name='related_doc')

admin.py
class DocAdmin(admin.StackedInline):
    extra = 1
    model = ProductOfferDoc

class OfferAdmin(admin.ModelAdmin):
    model = Offer
    list_display = ['code','company']
    inlines = [
        DocAdmin,
        CourseAdmin,
        RiskAdmin,
        ServiceAdmin,
        SanitaryAdmin,
    ]
class ProductOfferDoc(BaseModel):
    # ...
    offer = models.OneToOneField(Offer, related_name='related_doc')