AlliDeacon
AlliDeacon

Reputation: 1495

Creating an Inline Formset - Foreign Key Issue

I have the following 2 models that I want to use in a form set. I'm not sure what I've got wrong

models.py 
class AppTradingPartnerTrp(models.Model):
    id_trp = models.AutoField(primary_key=True)
    tpid_trp = models.CharField(max_length=50, blank=True, null=True)
    name_trp = models.CharField(max_length=50)
    description_trp = models.CharField(max_length=100, blank=True, null=True)
    idtrn_trp = models.ForeignKey('AppTransmissionTrn', models.DO_NOTHING, db_column='idtrn_trp', blank=True, null=True)




class AppCustomerTpRel(models.Model):
    id_rel = models.AutoField(primary_key=True)
    idcst_rel = models.ForeignKey(AppCustomerCst, models.DO_NOTHING, db_column='idcst_rel')
    idtrp_rel = models.ForeignKey(AppTradingPartnerTrp, models.DO_NOTHING, db_column='id_trp')
    cust_vendor_rel = models.CharField(max_length=50, blank=True, null=True)
    sender_id_rel = models.CharField(max_length=50, blank=True, null=True)
    old_vendor_rel = models.CharField(max_length=50, blank=True, null=True)
    vendor_name_rel = models.CharField(max_length=50, blank=True, null=True)
    category_rel = models.CharField(max_length=50, blank=True, null=True)

And here is where I'm trying to create the formset:

forms.py
CstVendorNoFormSet = inlineformset_factory(AppCustomerTpRel, AppTradingPartnerTrp, exclude=())

However when I do runserver I'm getting:

ValueError: 'AppTradingPartnerTrp' has no ForeignKey to 'AppCustomerTpRel'.

Upvotes: 0

Views: 261

Answers (2)

Ffion
Ffion

Reputation: 559

It looks like you've got your ForeignKey relationships the wrong way round.

Side note: I noticed that in your 'AppTradingPartnerTrp' model, for the idtrn_trp FK field, you have got 'AppTransmissionTrn' as a string, I think it should be AppTransmissionTrn without the apostrophes.

Upvotes: 1

iklinac
iklinac

Reputation: 15738

You have reversed the model order

inlineformset_factory(parent_model, model, ... )

Parent model is AppTradingPartnerTrp as it has multiple AppCustomerTpRel (foreign key) so

CstVendorNoFormSet = inlineformset_factory(AppTradingPartnerTrp, AppCustomerTpRel, exclude=())

Upvotes: 1

Related Questions