結論
値を入れ替えたい2つの行情報のうち、1行の対象カラムを一時的に別の値に更新することでタイトルのことができます。
解説
一意制約を持ったカラムは、一意であることが保証されています。そのため、いずれかの行と重複するような値に更新しようとするとエラーが発生します。ある2行に対して一意制約を持ったカラムの値を入れ替えたい場合、1行ずつ更新しようとするとどこかで一意制約にかかりエラーとなります。そこで、一方を一時的に別の値に更新し、入れ替えを行えるようにします。
サンプルコード
views.py
from django.db import transaction
# viewとなる関数を作成している想定
# hogeFieldが一意製制約を持っているIntegerFieldと想定
# エラーが起きた時にロールバックさせるため
@transaction.atomic
def hoge(request)
# ...
# 値を交換したい行情報を取得
item1 = Item.objects.get(pk=0)
item2 = Item.objects.get(pk=1)
hoge_tmp = item2.hogeField
# 必ず重複しないことが保証できる値を一時的に設定する
item2.hogeField = -2000000000
item2.save()
# item1の値と「退避したitem2(hoge_tmp)」の値を入れ替え
item1.hogeField, hoge_tmp = hoge_tmp, item1.hogeField
item1.save()
item2.hogeField = hoge_tmp
item2.save()
# ...
以上です。