2015-04-05 20 views
6

Diciamo che ho un modello per i post di social network, gli utenti e gli piace:Django composito unico su più campi modello

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) 

Sarebbe utile pensare a Post modello come rappresentano un post Facebook. Ora, vorrei limitare uno come per post per utente. Come lo realizzo? Un modo sarebbe quello di creare una chiave primaria composita sugli attributi (user, post) della classe Like. Non so come riuscirci in Django. L'altro sarebbe utilizzare unique=True su due attributi contemporaneamente. È possibile?

Grazie.

risposta

9

Sì, utilizzare 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') 
Problemi correlati