2013-07-29 4 views
5

Das Tutorial Django auf djangoproject.com gibt ein Modell wie folgt aus:Laden Befestigung mit many-to-one Beziehungen in 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 

Wahl verwendet eine ForeignKey, die eine Viele-zu-Eins-Beziehung ist, so sollte ich in der Lage sein, eine Choice für mehr als eine Umfrage zu verwenden. Wenn ich versuche, das aus einer Halterung zu laden, etwa so:

[ 
    { 
     "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 
     } 
    } 
] 

ich diesen Fehler:

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

Oder so:

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

ich diesen Fehler:

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

Wie kann ich viele-zu-eins-Beziehungen von laden eine Befestigung?

Antwort

3

Hier ist ein Zitat aus dem Tutorial:

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.

Jede Choice zu einem einzigen Poll verwandt ist und Sie versuchen, eine Liste der Schlüssel zum Choice.poll Feld zu übergeben.

{ 
    "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." 
    } 
} 

Hoffnung, die hilft:

Aber kann jede Umfrage mehrere Möglichkeiten in Beziehung gesetzt werden.

+0

Ja, es hat geholfen. Was ich zu tun versuchte, war eine Viele-zu-Viele-Beziehung, nachdem ich das Modell entsprechend geändert hatte, funktionierte es mit der [1, 2] -Syntax gut. Ich habe irgendwie die Viele-zu-Eins-Beziehung in meinem Kopf umgekehrt. – henrikstroem

Verwandte Themen