Skip to content

Instantly share code, notes, and snippets.

@Guilouf
Last active December 12, 2018 14:14
Show Gist options
  • Save Guilouf/129fbf0f3da128d6db8277313ce59068 to your computer and use it in GitHub Desktop.
Save Guilouf/129fbf0f3da128d6db8277313ce59068 to your computer and use it in GitHub Desktop.
Django ordered many to many field
class Film(models.Model):
name = models.CharField(max_length=30)
def __str__(self):
return self.name
class Jury(models.Model):
name = models.CharField(max_length=30)
many_films = models.ManyToManyField(Film, through='Classement')
def __str__(self):
return f"{self.name}"
class Classement(models.Model):
film_fk = models.ForeignKey(Film, on_delete=models.CASCADE)
jury_fk = models.ForeignKey(Jury, on_delete=models.CASCADE)
class Meta:
order_with_respect_to = 'jury_fk'
def __str__(self):
return f"{self.jury_fk}_{self.film_fk}-{self._order}_pk:{self.pk}"
# jury1 = Jury.objects.get(name='cannes')
# print(jury1.many_films.all())
# print(jury1.classement_set.all())
# print(jury1.get_classement_order())
# jury_osc = Jury.objects.get(name='oscar')
# print(jury_osc.many_films.all())
# print(jury_osc.classement_set.all())
# print(jury_osc.get_classement_order())
# jury_pub = Jury.objects.get(name='public')
# print('many_films', jury_pub.many_films.all())
# print('many_films_order', jury_pub.many_films.all().order_by('classement__order'))
# print(jury_pub.classement_set.all())
# print(jury_pub.get_classement_order())
# jury_pub.set_classement_order([13, 8, 9, 10, 12, 14])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment