user2880391
user2880391

Reputation: 2791

Django - create unique key that contains other models field

I'm trying to create 'unique_together' meta for a model, but instead of two fields from the current model, one of them is a field of other model (which is a foreign key in the current model): I want the 'Item' model to have unique_together that contains both its 'identifier' field and the Spec's container_id. a Spec is foreign key in 'Item'. Tried something like this, but I get "Unresolved reference spec..."

class Spec(BaseModel):
  title = models.CharField(max_length=200)
  identifier = models.IntegerField(unique=True)
  container = models.ForeignKey(Container, related_name='specs')

class Item(SubmittalsBaseModel, BaseModel, DirtyFieldsMixin):
  title = models.CharField(max_length=200)
  identifier = models.CharField(max_length=200, unique=True)
  spec = models.ForeignKey(Spec, related_name='items')

      class Meta:
        container_id = spec.container
        unique_together = ('identifier', 'container_id')

Upvotes: 1

Views: 5502

Answers (1)

zaidfazil
zaidfazil

Reputation: 9245

You can't do that.. (at least I think)..

The unique_together clause is directly translated to the SQL unique index. And you can only set those on columns of a single table, not a combination of several tables.

You can add validation for it yourself though, simply overwrite the validate_unique method and add this validation to it.

Docs: http://docs.djangoproject.com/en/dev/ref/models/instances/#django.db.models.Model.validate_unique

Upvotes: 1

Related Questions