Klaida validuojant Django modelius

C
  • 10 Vas '11

Sveiki, su Django meginu suprogramuoti: klausimus/ataskymus, gaunu toki errora, klaida kaip ir suprantu, tik kaip ja apeit?

dar meginau pakeist, bet nepadejo

user = models.ForeignKey("Comment.User", related_name="Comment")

Error: One or more models did not validate:
blogs.comment: Accessor for field 'user' clashes with related field 'User.comment_set'. Add a related_name argument to the definition for 'user'.
questions.comment: Accessor for field 'owner' clashes with related field 'User.comment_set'. Add a related_name argument to the definition for 'owner'.

modeliai:

class Question(models.Model):
    user = models.ForeignKey(User)
    slug = models.SlugField(max_length=120)
    title = models.CharField(max_length=100)
    text = models.TextField()
    created = models.DateTimeField('created', auto_now=True)

    def __unicode__(self):
        return self.title

class QuestionForm(ModelForm):
    class Meta:
        model = Question


class Comment(models.Model):
    owner  = models.ForeignKey(User)
    question = models.ForeignKey(Question)
    text = models.TextField(max_length=1024)
    created = models.DateTimeField('created')

    def __unicode__(self):
        return self.title

    class Meta:
        ordering = ['-created']

class CommentForm(ModelForm):
    class Meta:
        model = Comment
C
  • 11 Vas '11

Na lyg ir radau beda. turiu 2 App'us, ir viename is ju jau buvo modelis Comment, tai siuo atveju pervadinau Comment i BlogComment ir suvalge . Man tik keista kad Django skirtingose Appuose negali vartoti tu paciu vardu, mat ir lenteliu prefixai skiriais

S
  • 11 Vas '11

Tavo pateiktame kode pavyzdyje neradau tokio dalyko kaip

user = models.ForeignKey("Comment.User", related_name="Comment")

Todėl negaliu pasakyti, kas buvo blogai.

Bendruoju atveju, Django visus susietus modelius bando įtraukti į to modelio atributų sąrašą, todėl jei du modeliai tuo pačiu pavadinimu priklauso nuo vieno bendro modulio, tai gali ir atsirasto tokios klaidos. Tokiais atvejais, nebūtina keisti pačio modelio pavadinimo, užtenka nurodyti, kokiu atributu, vienas iš tų modelių vienodais pavadinimais, turėtų įsirašyti į siejamo modelio atributus.