2015-04-05 17 views
6

Powiedzmy mam model stanowisk społecznościowy, użytkowników i lubi:Django kompozytowy unikatowe na wielu polach modelowych

class Post(models.Model): 
    submitter = models.ForeignKey(User, null=False, default=None) 
    content = models.CharField() 
    date = models.DateField() 

    with_likes = PostLikeCountManager() 
    objects = models.Manager() 

class Like(models.Model): 
    user = models.ForeignKey(User) 
    post = models.ForeignKey(Post) 
    time = models.DateTimeField(auto_now_add=True) 

To byłoby pomocne, aby myśleć o Post modelu jako reprezentujący Facebook post. Teraz chciałbym ograniczyć jeden podobny post na jednego użytkownika. Jak to osiągnąć? Jednym ze sposobów byłoby utworzenie złożonego klucza podstawowego w atrybutach (user, post) klasy Like. Nie wiem, jak to osiągnąć w Django. Drugim byłoby użycie unique=True na dwóch atrybutach jednocześnie. Czy to jest możliwe?

Dzięki.

Odpowiedz

9

Tak, użyj unique_together:

class Like(models.Model): 
    user = models.ForeignKey(User) 
    post = models.ForeignKey(Post) 
    time = models.DateTimeField(auto_now_add=True) 

    class Meta: 
     unique_together = ('user', 'post') 
Powiązane problemy