I'm going to answer myself in case anyone else looks for an answer to this. In Django<2.x, the Subquery method I'm using is the best available.
In Django>=2, I can use the FilteredRelation with my annotation instead: https://docs.djangoproject.com/en/2.1/ref/models/querysets/#django.db.models.FilteredRelation The uniqueness constraint is actually already there in my actual model, and Django supports that through unique_together = ('journal', 'issn_type'). On Tuesday, October 30, 2018 at 2:05:58 PM UTC-4, Dan Davis wrote: > > > Suppose you have a setup like this: > > class Journal(models.Model): > title = models.CharField(max_length=200) > > > issn_type_choices = ( > ('E', 'Electronic'), > ('P', 'Print'), > } > > class Issn(models.Model): > ELECTRONIC='E' > PRINT='P' > > journal = models.ForeignKey(Journal) > issn_type = models.CharField(max_length=1) > issn = models.CharField(max_length=10) > > > I can express annotations to assure I get botha Physical and Print ISSN: > > issn_p=Issn.objects.filter(issn_type='E', journal_id=OuterRef('id')) > issn_e=Issn.objects.filter(issn_type='P', journal_id=OuterRef('id')) > queryset = Journal.objects.annotate(issn_print=Subquery(issn_p), > issn_electronic=Subquery(issn_e)).filter(issn_print__isnull=False, > issn_electronic__isnull=False) > > > However, is there anyway for me to express two OneToOneField relationships > from Issn to Journal to make sure a constraint is added at the database > level and get easier querysets? > > > Thanks, > > -Dan > > -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/django-users. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/bc06ee4d-e159-4ea1-b44b-f8099b567581%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.

