diff --git a/propositions/migrations/0003_reponse_renaming_and_cleaning.py b/propositions/migrations/0003_reponse_renaming_and_cleaning.py new file mode 100644 index 0000000..6489374 --- /dev/null +++ b/propositions/migrations/0003_reponse_renaming_and_cleaning.py @@ -0,0 +1,75 @@ +# Generated by Django 2.2.9 on 2020-01-05 13:32 + +from django.conf import settings +from django.db import migrations, models + + +def move_profile_to_user(apps, schema_editor): + Reponses = apps.get_model("propositions", "reponses") + for answer in Reponses.objects.all(): + answer.user = answer.part.user + answer.save() + + +def move_user_to_profile(apps, schema_editor): + # One should do something similar to ``move_profile_to_user`` AND make the + # ``part`` field temporarily nullable in the operations below. + # => Grosse flemme + raise NotImplementedError("Who uses migrations backwards anyway?") + + +class Migration(migrations.Migration): + + dependencies = [ + ("gestion", "0001_initial"), + ("propositions", "0002_nom_verbose_name"), + ] + + operations = [ + migrations.AlterModelOptions( + name="reponses", + options={ + "verbose_name": "Réponse à une proposition", + "verbose_name_plural": "Réponses à une proposition", + }, + ), + migrations.RenameField( + model_name="reponses", old_name="prop", new_name="proposition", + ), + migrations.AddField( + model_name="reponses", + name="user", + field=models.ForeignKey( + on_delete=models.deletion.CASCADE, + to=settings.AUTH_USER_MODEL, + null=True, + ), + ), + migrations.RunPython(move_profile_to_user, move_user_to_profile), + migrations.AlterField( + model_name="reponses", + name="user", + field=models.ForeignKey( + on_delete=models.deletion.CASCADE, + to=settings.AUTH_USER_MODEL, + null=False, + ), + ), + migrations.RemoveField(model_name="reponses", name="part"), + migrations.AddField( + model_name="reponses", + name="answer", + field=models.CharField( + choices=[("oui", "Oui"), ("non", "Non")], + default="non", + max_length=3, + verbose_name="Réponse", + ), + preserve_default=False, + ), + migrations.AlterUniqueTogether( + name="reponses", unique_together={("proposition", "user")}, + ), + migrations.RemoveField(model_name="reponses", name="reponse",), + migrations.RenameModel(old_name="reponses", new_name="answer"), + ] diff --git a/propositions/models.py b/propositions/models.py index 8e61373..4453cab 100644 --- a/propositions/models.py +++ b/propositions/models.py @@ -1,10 +1,8 @@ +from django.contrib.auth import get_user_model from django.db import models from gestion.models import ErnestoUser -REP = ( - ('oui', 'Oui'), - ('non', 'Non'), - ) +User = get_user_model() class Prop(models.Model): @@ -22,7 +20,20 @@ class Prop(models.Model): verbose_name = "Proposition" -class Reponses(models.Model): - prop = models.ForeignKey(Prop, on_delete=models.CASCADE) - part = models.ForeignKey(ErnestoUser, on_delete=models.CASCADE) - reponse = models.CharField("Réponse", max_length=20, blank=True, choices=REP) +class Answer(models.Model): + YES = "oui" + NO = "non" + + REP_CHOICES = [ + (YES, "Oui"), + (NO, "Non") + ] + + proposition = models.ForeignKey(Prop, on_delete=models.CASCADE) + user = models.ForeignKey(User, on_delete=models.CASCADE) + answer = models.CharField("Réponse", max_length=3, choices=REP_CHOICES) + + class Meta: + unique_together = ("proposition", "user") + verbose_name = "Réponse à une proposition" + verbose_name_plural = "Réponses à une proposition" diff --git a/propositions/templates/propositions/liste.html b/propositions/templates/propositions/liste.html index 4bf8d8f..4209350 100644 --- a/propositions/templates/propositions/liste.html +++ b/propositions/templates/propositions/liste.html @@ -21,12 +21,15 @@ {% for p in propositions %}