Ето го проблема:
Имам такъв модел:
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 (True).
В момента решавам този проблем, като променям модела в това:
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 може да е много дълго).
И така, бих искал да знам дали има някакъв по-елегантен подход за решаване на този вид проблем.
Благодаря!