J'ai un modèle
class Survey(models.Model):
created_by = models.ForeignKey(User)
question = models.CharField(max_length=150)
active = models.NullBooleanField()
def __unicode__(self):
return self.question
et maintenant je veux mettre à jour uniquement le active
champ. Alors je fais ceci:
survey = get_object_or_404(Survey, created_by=request.user, pk=question_id)
survey.active = True
survey.save(["active"])
Maintenant, j'obtiens une erreur IntegrityError: PRIMARY KEY must be unique
.
Ai-je raison avec cette méthode de mise à jour?
la source
.get
au lieu de.filter
et cela ne fonctionne pas. Mais avec le filtre, cela fonctionne bien. Savez-vous ce qui ne va pas avec mon code ci-dessus?question_id
. D'où vient cette valeur? Et quelle ligne exacte soulève leIntegrityError
?question_id
provient des URL(?P<question_id>\d+)
. Ma faute était que sur le serveur de travail, django 1.4 est installé et mon code est 1.5. Mais avec votre code, cela fonctionne bien.save()
(solution @Alasdair) est une solution plus sûre, car cette méthode peut déclencher des choses comme la validation, ou tout autre code personnalisé, queupdate()
ne le fait pas.