@@ -316,6 +316,14 @@ class RelationalModel(models.Model):
316316 through = models .ManyToManyField (ThroughTargetModel , through = Supplementary , related_name = 'reverse_through' )
317317
318318
319+ class UniqueTogetherModel (models .Model ):
320+ foreign_key = models .ForeignKey (ForeignKeyTargetModel , related_name = 'unique_foreign_key' )
321+ one_to_one = models .OneToOneField (OneToOneTargetModel , related_name = 'unique_one_to_one' )
322+
323+ class Meta :
324+ unique_together = ("foreign_key" , "one_to_one" )
325+
326+
319327class TestRelationalFieldMappings (TestCase ):
320328 def test_pk_relations (self ):
321329 class TestSerializer (serializers .ModelSerializer ):
@@ -395,6 +403,32 @@ class Meta:
395403 """ )
396404 self .assertEqual (unicode_repr (TestSerializer ()), expected )
397405
406+ def test_nested_unique_together_relations (self ):
407+ class TestSerializer (serializers .HyperlinkedModelSerializer ):
408+ class Meta :
409+ model = UniqueTogetherModel
410+ depth = 1
411+ expected = dedent ("""
412+ TestSerializer():
413+ url = HyperlinkedIdentityField(view_name='uniquetogethermodel-detail')
414+ foreign_key = NestedSerializer(read_only=True):
415+ url = HyperlinkedIdentityField(view_name='foreignkeytargetmodel-detail')
416+ name = CharField(max_length=100)
417+ one_to_one = NestedSerializer(read_only=True):
418+ url = HyperlinkedIdentityField(view_name='onetoonetargetmodel-detail')
419+ name = CharField(max_length=100)
420+ class Meta:
421+ validators = [<UniqueTogetherValidator(queryset=UniqueTogetherModel.objects.all(), fields=('foreign_key', 'one_to_one'))>]
422+ """ )
423+ if six .PY2 :
424+ # This case is also too awkward to resolve fully across both py2
425+ # and py3. (See above)
426+ expected = expected .replace (
427+ "('foreign_key', 'one_to_one')" ,
428+ "(u'foreign_key', u'one_to_one')"
429+ )
430+ self .assertEqual (unicode_repr (TestSerializer ()), expected )
431+
398432 def test_pk_reverse_foreign_key (self ):
399433 class TestSerializer (serializers .ModelSerializer ):
400434 class Meta :
0 commit comments