'Resposta' instância precisa ter um valor de chave primária antes de uma relação muitos-para-muitos pode ser usado

votos
2

Eu tenho um modelo chamado Answerque tem um ForeignKeyrelacionamento para outro modelo chamado Question. Isto significa que pode haver várias respostas para questionar, naturalmente.

class Question(models.Model):
    kind = models.CharField(max_length=1, choices=_SURVEY_QUESTION_KINDS)
    text = models.CharField(max_length=256)

class Answer(models.Model):
    user = models.ForeignKey(User, related_name='answerers')
    question = models.ForeignKey(Question)
    choices = models.ManyToManyField(Choice, null=True, blank=True) # <-- !
    text = models.CharField(max_length=_SURVEY_CHARFIELD_SIZE, blank=True)

Agora eu estou tentando criar uma Answerinstância e, em seguida, definir a relação M2M para Choice, mas eu recebo o seguinte erro antes mesmo de tocar o M2M:'Answer' instance needs to have a primary key value before a many-to-many relationship can be used.

 ans = Answer(user=self._request.user,
              question=self._question[k],
              text=v)
 ans.save() # [1]

Quando eu comentar [1]o problema vai embora, é claro, mas eu não entendo por que se trata-se, em primeiro lugar, porque, como você pode ver, eu estou fazendo nada com o M2M em tudo!


EDIT: Ele não parece ser um problema com o nome de choicesqualquer um. Eu tentei mudando a cada ocorrência do mesmo para optionscom o mesmo problema.

Publicado 08/05/2009 em 11:40
fonte usuário
Em outras línguas...                            


1 respostas

votos
2

Obrigado a todos que levou o seu tempo sobre esta questão. As classes fornecidas na minha pergunta não eram completos, porque eu pensei que os internos Metaaulas não importava. Na verdade, Answerficou assim:

class Answer(models.Model):
    """
    We have two fields here to represent answers to different kinds of
    questions.  Since the text answers don't have any foreign key to anything
    relating to the question that was answered, we must have a FK to the
    question.
    """

    class Meta:
        order_with_respect_to = 'options'

    def __unicode__(self):
        return '%s on "%s"' % (self.user, self.question)

    user     = models.ForeignKey(User, related_name='answers')
    question = models.ForeignKey(Question)
    options  = models.ManyToManyField(Option, blank=True)
    text     = models.CharField(max_length=_SURVEY_CHARFIELD_SIZE, blank=True)
    answered = models.DateTimeField(auto_now_add=True)

Dê uma olhada order_with_respect_toe você vai entender onde o erro veio. :)

Respondeu 08/05/2009 em 12:56
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more