Reputation:
I'm trying to be able to assign multiple jobs to an invoice/purchase, however I'm running into an issue. Am I missing something? Does this need to be a many-to-many or something?
I'm getting the following error:
invoices.Job.job: (fields.E304) Reverse accessor for 'Job.job' clashes with reverse accessor for 'Job.job'.
HINT: Add or change a related_name argument to the definition for 'Job.job' or 'Job.job'.
purchases.Job.job: (fields.E304) Reverse accessor for 'Job.job' clashes with reverse accessor for 'Job.job'.
HINT: Add or change a related_name argument to the definition for 'Job.job' or 'Job.job'.
purchases/models.py
class Purchase(models.Model):
...
class Job(models.Model):
purchase = models.ForeignKey(Purchase)
job = models.ForeignKey('jobs.Job')
def __str__(self):
return self.job
invoices/models.py
class Invoice(models.Model):
...
class Job(models.Model):
invoice = models.ForeignKey(Invoice)
job = models.ForeignKey('jobs.Job')
def __str__(self):
return self.job
Upvotes: 5
Views: 5597
Reputation: 649
You need to change the related names in foreign key and possibly rename the models for clarity.
# i dont recommended ever naming 2 models the exact same way either
class PurchaseJob(models.Model):
purchase = models.ForeignKey(Purchase, related_name='purchase_job')
class InvoiceJob(models.Model):
invoice = models.ForeignKey(Invoice, related_name='invoice_job')
Adding related names keeps naming conventions clean and neat, also you avoid alot of Django errors by doing so.
Upvotes: 8