2014-07-17 4 views
0

Ne pas être en mesure d'afficher un seul objet lié avec uri des ressources:-Un objet ne pas être lié à un objet existant

 http://127.0.0.1:8000/api/v1/job/
{ "name":"jobstestfinal2", 
    "payment":"/api/v1/payment/2/" 
} 

obtenir aucune erreur. juste nul à la place de l'objet de paiement.

models.py

class Job(models.Model): 
    name = models.CharField(max_length=200) 


class Payment(models.Model): 
    scheduled = models.DateTimeField() 
    job = models.OneToOneField(
     Job, 
     related_name="payment", 
     blank=True, 
     null=True) 

resource.py

class PaymentResource(ModelResource): 
     job = fields.ToOneField(
      'myapp.resources.JobResource', 
      'job', null=True, blank=True) 

     class Meta: 
      queryset = Payment.objects.all() 
      resource_name = 'payment' 
      authorization = Authorization() 
      allowed_methods = ('get', 'put', 'post') 


class JobResource(ModelResource): 
    payment = fields.ToOneField(
     PaymentResource, 
     'payment', 
     related_name='job', 
     null=True, blank=True 
    ) 

    class Meta: 
     queryset = Job.objects.all() 
     resource_name = 'job' 
     authorization = Authorization() 
     allowed_methods = ('get', 'put', 'post') 

points d'extrémité FYI suivants fonctionnent très bien:
emploi GET, le paiement
emploi POST [avec l'objet de paiement]
paiement [avec emploi]
payment [avec objet recherché]

Répondre

0

Si vous souhaitez utiliser l'exemple d'URL de message que vous avez publié.

http://127.0.0.1:8000/api/v1/job/ 

{ "name":"jobstestfinal2", 
    "payment":"/api/v1/payment/2/" # Not sure if you have to use payment_set or not. 
} 

changer votre foreign key à partir Payment à Job

class Job(models.Model): 
    name = models.CharField(max_length=200) 
    payment = models.ForeignKey(# Changed from OneToOne to ForeingKey 
    Payment, 
    blank=True, # True means a job doesn't have to have a payment 
    null=True # Allowing the value NULL in your database 
) 

class Payment(models.Model): 
    scheduled = models.DateTimeField() 

Vous pouvez ajouter le paiement à un emploi

job = Job(name='nice job') 
job.save() # Your Job must have an ID before you can link it to a Payment 
payment = Payment(scheduled='2014-1-1 10:00') 
job.payment_set.add(payment) 
job.save() 

et un emploi à un paiement.

job = Job(name='nice job') 
job.save() # Your Job must have an ID before you can link it to a Payment 
payment = Payment(scheduled='2014-1-1 10:00') 
payment.job = job # The difference is the _set.add when you do it through the Job model 
payment.save() 
+0

ma question est spécifique à la façon de le faire via une demande de publication d'api. solution que vous avez donné est pour shell je pense – shifu

+0

S'il vous plaît jeter un oeil de plus près à mon exemple. Je crée une référence de Payment to Job. Ce que vous essayez de faire est de l'emploi au paiement. Si je fais 'curl --dump-header - -H" Type de contenu: application/json "-X POST --data '{" scheduled ":" 2013-10-10 00:00 "," payment ":"/api/v1/job/2/"}" http: // localhost: 8000/api/v1/payment/'J'ai ce que vous essayez – Eagllus

+0

désolé de ne pas vous avoir. dois-je faire une fonction hydrate/déshydrater et ajouter une manipulation? et la requête que vous avez expliquée dans l'exemple fonctionne déjà. – shifu

Questions connexes