2013-07-29 18 views
5

Tutorial Django na djangoproject.com daje model takiego:Oprawa Ładowanie z wielu do jednej relacji w Django

import datetime 
from django.utils import timezone 
from django.db import models 

class Poll(models.Model): 
    question = models.CharField(max_length = 200) 
    pub_date = models.DateTimeField('date published') 

    def __unicode__(self): 
     return self.question 

    def was_published_recently(self): 
     now = timezone.now() 
     return now - datetime.timedelta(days = 1) <= self.pub_date < now 

    was_published_recently.admin_order_field = 'pub_date' 
    was_published_recently.boolean = True 
    was_published_recently.short_description = 'Published recently?' 

class Choice(models.Model): 
    poll = models.ForeignKey(Poll) 
    choice_text = models.CharField(max_length = 200) 
    votes = models.IntegerField(default = 0) 

    def __unicode__(self): 
     return self.choice_text 

Wybór używa ForeignKey, która jest relacją wiele-do-jednego, więc powinien być w stanie użyć wyboru dla więcej niż jednej ankiety. Gdy próbuję załadować to z urządzenia, tak jak poniżej:

[ 
    { 
     "model": "polls.Poll", 
     "pk": 3, 
     "fields": { 
      "question": "What time do you sleep?", 
      "pub_date": "2013-07-29T10:00:00+00:00" 
     } 
    }, 
    { 
     "model": "polls.Poll", 
     "pk": 4, 
     "fields": { 
      "question": "What time do you get up?", 
      "pub_date": "2013-07-29T10:00:00+00:00" 
     } 
    }, 
    { 
     "model": "polls.Choice", 
     "pk": 4, 
     "fields": { 
      "poll": [{"pk": 3}, {"pk": 4}], 
      "choice_text": "10:00", 
      "votes": 0 
     } 
    } 
] 

otrzymuję ten błąd:

DeserializationError: Problem installing fixture '/.../poll/polls/fixtures/initial_data.json': [u"'[{u'pk': 3}, {u'pk': 4}]' value must be an integer."] 

lub tak:

{ 
     "model": "polls.Choice", 
     "pk": 4, 
     "fields": { 
      "poll": [3, 4], 
      "choice_text": "10:00", 
      "votes": 0 
     } 
    } 

otrzymuję ten błąd:

DeserializationError: Problem installing fixture '/.../poll/polls/fixtures/initial_data.json': [u"'[3, 4]' value must be an integer."] 

Jak mogę załadować relacje wiele-do-jednego z urządzenie?

Odpowiedz

3

Oto cytat z poradnika:

Finally, note a relationship is defined, using ForeignKey. That tells Django each Choice is related to a single Poll. Django supports all the common database relationships: many-to-ones, many-to-manys and one-to-ones.

Każdy Choice jest związana z jednym Poll i próbujesz przekazać listę kluczy do pola Choice.poll.

Ale każda sonda może być związana z kilku opcji:

{ 
    "pk": 4, 
    "model": "polls.Choice", 
    "fields": { 
     "votes": 0, 
     "poll": 2, 
     "choice_text": "Meh." 
    } 
}, 
{ 
    "pk": 5, 
    "model": "polls.Choice", 
    "fields": { 
     "votes": 0, 
     "poll": 2, 
     "choice_text": "Not so good." 
    } 
} 

nadzieję, że pomoże.

+0

Tak, pomógł. Próbowałem zrobić relację wiele do wielu, po zmianie modelu na odpowiednio działało, używając składni [1, 2]. W jakiś sposób zmieniłem relację wiele do jednego w mojej głowie. – henrikstroem

Powiązane problemy