Вот в чем проблема:
У меня такая модель:
class UserBook(models.Model):
user = models.ForeignKey(User)
book = models.ForeignKey(Book)
is_active = models.BooleanField(default=False)
class Meta:
unique_together = ("user", "book")
Очевидно, что в этой модели уже есть уникальное ограничение вместе для полей пользователь и книга. И, возможно, в базе будут такие записи:
------------------------------
|user_id book_id is_active |
| 1 1 0 |
| 1 2 0 |
| 1 3 1 |
------------------------------
И у меня есть еще одно ограничение, которое нужно добавить, а именно: у каждого пользователя может быть не более одной записи, в которой значение поля is_active равно 1 (Истина).
В настоящее время я решаю эту проблему, изменив модель на такую:
class UserBook(models.Model):
user = models.ForeignKey(User)
book = models.ForeignKey(Book)
is_active = models.BooleanField(default=False)
key = models.charFeild(max_length=255, unique=True)
class Meta:
unique_together = ("user", "book")
def save(self, *args, **kwargs):
if self.is_active:
self.key = "%s_%s" %(self.user_id, self.is_active)
else:
self.key = "%s_%s_%s" %(self.user_id, self.is_active, self.book_id)
Добавьте поле ключ и настройте метод сохранения этой модели.
Но при таком подходе max_length не может быть больше 255 (в моем случае не о чем беспокоиться, но иногда поле key может быть очень длинным).
Итак, я хотел бы знать, есть ли более элегантный подход к решению такого рода проблем.
Спасибо!