2013-12-19 144 views
1
I have the following models - 

class Jobdtl(models.Model): 
    jobdtl_id = models.IntegerField(primary_key=True) 
    jobdtl_cmd = models.TextField(blank=True) 
    jobdtl_envfile = models.TextField(blank=True) 
    jobdtl_retnsn = models.SmallIntegerField(blank=True, null=True) 
    jobdtl_allowadhoc = models.CharField(max_length=1, blank=True) 
    jobdtl_waitop = models.CharField(max_length=1, blank=True) 

    class Meta: 
     managed = False 
     db_table = 'jobdtl' 

class Jobmst(models.Model): 
    jobmst_id = models.IntegerField(primary_key=True) 
    jobmst_prntid = models.IntegerField(blank=True, null=True) 
    jobmst_active = models.CharField(max_length=1, blank=True) 
    jobmst_evntoffset = models.SmallIntegerField(blank=True, null=True) 
    jobmst_name = models.TextField(blank=True) 
    jobmst_owner = models.IntegerField(blank=True, null=True) 
    jobmst_crttm = models.DateTimeField() 
    jobdtl_id = models.ForeignKey('Jobdtl', db_column='jobdtl_id', related_name='mstdtl', blank=True, null=True) 
    jobmst_lstchgtm = models.DateTimeField(blank=True, null=True) 
    def __unicode__(self): 
     return self.jobmst_name 
    class Meta: 
     managed = False 
     db_table = 'jobmst' 

我試圖產生類似於我們這裏有一個JSON - 在這裏使用的步驟Django的REST框架嵌套關係

http://stackoverflow.com/questions/19709101/django-rest-framework-multiple-models 

-

http://stackoverflow.com/questions/16793608/how-to-write-a-django-rest-framework-serializer-field-to-merge-data-from-gener 

這些都是我的串行 -

class JobmstSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = Jobmst 

class JobdtlSerializer(serializers.ModelSerializer): 
    jobmst_id = JobmstSerializer(many=True) 

    class Meta: 
     model = Jobdtl 

這是我的看法

class ResultsList(ListAPIView): 
    def list(self, request, *args, **kwargs): 
     jobmstquery = Jobmst.objects.using('Admiral').all() 
     jobdtlquery = Jobdtl.objects.using('Admiral').all() 

     results = list() 
     entries = list(chain(jobmstquery, jobdtlquery)) # combine the two querysets 
     for entry in entries: 
      type = entry.__class__.__name__.lower() # 'jobmst', 'jobdtl' 
      if isinstance(entry, Jobmst): 
       serializer = JobmstSerializer(entry) 
       dictionary = {'type': jobmst, 'jobmst_id': jobmst_id, 'jobmst_type': jobmst_type, 'jobmst_prntid': jobmst_prntid, 'jobmst_active': jobmst_active, 'evntmst_id': evntmst_id, 'jobmst_evntoffset': jobmst_evntoffset, 'jobmst_name': jobmst_name, 'jobmst_mode': jobmst_mode, 'jobmst_owner': jobmst_owner, 'jobmst_desc': jobmst_desc, 'jobmst_crttm': jobmst_crttm, 'jobdtl_id': jobdtl_id, 'jobmst_lstchgtm': jobmst_lstchgtm} 
      if isinstance(entry, Jobdtl): 
       serializer = JobdtlSerializer(entry) 
       dictionary = {'type': jobdtl, 'jobdtl_id': jobdtl, 'jobdtl_cmd': jobdtl_cmd, 'jobdtl_envfile': jobdtl_envfile, 'jobdtl_retnsn': jobdtl_retnsn, 'jobdtl_allowadhoc': jobdtl_allowadhoc, 'jobdtl_waitop': jobdtl_waitop} 
      results.append(dictionary) 
     return Response(results) 

我配合它通過我的網址 -

urlpatterns = patterns('TidalDEV.views', 
    url(r'^TidalDEV/$', 'ResultsList'), 
    url(r'^TidalDEV/(?P<pk>[0-9]+)/$', 'ResultsList'), 
) 

但是,當我打我的網址在http://localhost/TidalDEV/http://localhost/TidalDEV/50244/

我得到一個錯誤砰 -

Exception Type:  TypeError 
Exception Value:  

__init__() takes 1 positional argument but 2 were given 

Exception Location:  D:\Python33\lib\site-packages\django\core\handlers\base.py in get_response, line 114 
+0

如果可能,請提供完整的堆棧跟蹤。 – mariodev

+0

其實我覺得我找到了解決方案(還在調查中)。我已經鏈接了兩張表,查看更多鏈接。 – whoisearth

回答

1

我最終做了以下工作,它的工作 -

class JobdtlSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = Jobdtl 

class JobmstSerializer(serializers.ModelSerializer): 
    jobdtl_id = JobdtlSerializer() 

    class Meta: 
     model = Jobmst 

然後用默認視圖的變化連接 -

@csrf_exempt 
def jobmst_list(request): 
    """ 
    List all code snippets, or create a new snippet. 
    """ 
    if request.method == 'GET': 
     DEV = Jobmst.objects.using('AdmiralDEV').all() 
     serializer = JobmstSerializer(DEV, many=True) 
     return XMLResponse(serializer.data) 

    elif request.method == 'POST': 
     data = XMLParser().parse(request) 
     serializer = JobmstSerializer(data=data) 
     if serializer.is_valid(): 
      serializer.save() 
      return XMLResponse(serializer.data, status=201) 
     else: 
      return XMLResponse(serializer.errors, status=400) 

@csrf_exempt 
def jobmst_detail(request, pk): 
    """ 
    Retrieve, update or delete a code snippet. 
    """ 
    try: 
     DEV = Jobmst.objects.using('AdmiralDEV').get(jobmst_id=pk) 
    except Jobmst.DoesNotExist: 
     return HttpResponse(status=404) 

    if request.method == 'GET': 
     serializer = JobmstSerializer(DEV) 
     return XMLResponse(serializer.data) 

    elif request.method == 'PUT': 
     data = XMLParser().parse(request) 
     serializer = JobmstSerializer(DEV, data=data) 
     if serializer.is_valid(): 
      serializer.save() 
      return XMLResponse(serializer.data) 
     else: 
      return XMLResponse(serializer.errors, status=400) 

    elif request.method == 'DELETE': 
     DEV.delete() 
     return HttpResponse(status=204) 

,讓我從2樓獨立的模型得到的。它沒有格式化和醜陋,但證明它可以完成。需要弄清楚如何連接超過這兩個模型(我至少有5個)。

+0

我處於類似的情況,但我不知道你做了什麼。你能解釋一下你的代碼嗎? – Pureferret