শৌলের মতো অনুরূপ পন্থা ব্যবহার করা, তবে কিছুটা ভিন্ন উদ্দেশ্য:
class TrueUniqueBooleanField(BooleanField):
def __init__(self, unique_for=None, *args, **kwargs):
self.unique_for = unique_for
super(BooleanField, self).__init__(*args, **kwargs)
def pre_save(self, model_instance, add):
value = super(TrueUniqueBooleanField, self).pre_save(model_instance, add)
objects = model_instance.__class__.objects
if self.unique_for:
objects = objects.filter(**{self.unique_for: getattr(model_instance, self.unique_for)})
if value and objects.exclude(id=model_instance.id).filter(**{self.attname: True}):
msg = 'Only one instance of {} can have its field {} set to True'.format(model_instance.__class__, self.attname)
if self.unique_for:
msg += ' for each different {}'.format(self.unique_for)
raise ValidationError(msg)
return value
এই বাস্তবায়নটি ValidationError
সত্যের মান সহ অন্য রেকর্ড সংরক্ষণের চেষ্টা করার সময় উত্থাপন করবে ।
এছাড়াও, আমি unique_for
যুক্তিটি যুক্ত করেছি যা মডেলটির অন্য যে কোনও ক্ষেত্রে সেট করা যেতে পারে, কেবল একই মান সহ রেকর্ডগুলির জন্য সত্য-স্বতন্ত্রতা পরীক্ষা করতে, যেমন:
class Phone(models.Model):
user = models.ForeignKey(User)
main = TrueUniqueBooleanField(unique_for='user', default=False)