在Django中使用表单集时,如何在内联中包含内联

我想在我的表单集中应用具有 form-Case模型的情况,以及在具有 Offers-Offer模型内联的游艇的情况下应用内联-游艇型号

models.py

class Case(models.Model):
    client=models.ForeignKey(Client,null=True,verbose_name="Client",on_delete = models.CASCADE)
    date_created = models.DateTimeField("Date of Case Creation",blank=True,default=datetime.datetime.now)
    comment = models.CharField("Comments",max_length=500,null=True)

class Offer(models.Model):
    date_created = models.DateTimeField("Date of Offer creation",default=datetime.datetime.now)
    notes=models.CharField("Offer Notes",max_length=100,blank=True)
    case=models.ForeignKey(Case,verbose_name="Case",on_delete = models.CASCADE)

class Yacht(models.Model):
    name = models.CharField(max_length=50,verbose_name="Name")
    price_per_day=models.DecimalField("Price(€) / Day",max_digits=8,decimal_places=2,default=0,blank=True)
    passengers = models.IntegerField("Passengers",null=True)

class OfferHasYacht(models.Model):
    offer=models.ForeignKey(Offer,verbose_name="Offer",on_delete = models.CASCADE)
    yacht=models.ForeignKey(Yacht,verbose_name="Yacht",on_delete = models.CASCADE)

在forms.py中:

OfferOfferHasYachtFormSet=inlineformset_factory(Offer,OfferHasYacht,form=OfferHasYachtForm,extra=1)

具有要约形式和内联OfferHasYacht(不包括OfferHasYachtForm的要约)可以正常工作

class OfferHasYachtForm(ModelForm):

    yacht = ModelChoiceField(required=True,queryset=Yacht.objects.all(),widget=autocomplete.ModelSelect2(url='yacht-autocomplete'))

    class Meta:
        model = OfferHasYacht
        fields = ['yacht']


    def __init__(self,*args,**kwargs):
            super(OfferHasYachtForm,self).__init__(*args,**kwargs)
            self.fields['yacht'].label = "Choose Yacht"

但是在尝试声明表单集时:

CaseOfferHasYachtFormSet=inlineformset_factory(Case,extra=1)

django抱怨:

ValueError: 'intranet.OfferHasYacht' has no ForeignKey to 'intranet.Case'.

如何解决该问题,以使我可以创建或更新包含要约的商品(作为内联)以及每个具有游艇的要约(作为内联)。

fishin8 回答:在Django中使用表单集时,如何在内联中包含内联

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3065350.html

大家都在问