2016-05-17 137 views
0

我是Django的新手,并试图了解如何在模型中设置数据库关系。我有以下两种型号:Django Restful Model外键 - 指定字段

class BusinessTypes(models.Model): 
    categoryID = models.AutoField(db_column='TypeID', primary_key=True) # Field name made lowercase. 
    category = models.CharField(db_column='type', max_length=200) 
    newtype = models.CharField(db_column='newType', max_length=200) # Field name made lowercase. 
    dec = models.CharField(max_length=255) 
    tabsize = models.CharField(db_column='tabSize', max_length=10) # Field name made lowercase. 
    #subcategory = models.ForeignKey(BusinessTypesSub, to_field='Type_ID') 

    class Meta: 
     managed = False 
     db_table = 'business_types' 
     app_label = 'sapi' 

class BusinessTypesSub(models.Model): 
    subcategoryID = models.AutoField(db_column='Type_subID', primary_key=True) # Field name made lowercase. 
    categoryID = models.IntegerField(db_column='Type_ID') # Field name made lowercase. 
    status = models.IntegerField() 
    showpub = models.IntegerField(db_column='showPub') # Field name made lowercase. 
    showcity = models.CharField(db_column='showCity', max_length=20) # Field name made lowercase. 
    subcategory = models.CharField(db_column='sub', max_length=255) 
    sub_alternative = models.CharField(max_length=255) 
    category = models.ForeignKey(BusinessTypes,from_field='Type_ID', to_field='TypeID') 

    class Meta: 
     managed = False 
     db_table = 'business_types_sub' 
     app_label = 'api' 

business_types和business_types_sub表之间存在一对多关系。我想设置一个外键关系,这样如果我创建一个视图,并通过BusinessTypesSub调用序列化程序,我可以访问BusinessTypesModel中类别字段的值。外键关系应该从BusinessTypesSub字段的'Type_ID'到BusinessTypes字段'TypeID'。

我该如何创建?我试着添加以下的BusinessTypesSub模型,但它只是创建了以下错误:

category = models.ForeignKey(BusinessTypes,to_field='TypeID') 

BusinessTypes has no field named 'TypeID' 

另外,我怎么可以在视图/串行器调用它。例如如何将我的“类别”添加到以下串行:

class BusinessTypesSubSerializer(serializers.ModelSerializer): 
    category = serializers.RelatedField(source='BusinessType', read_only=True) 

    class Meta: 
     model = BusinessTypesSub 
     fields = ('categoryID', 'category', 'subcategoryID', 'subcategory') 

回答

0

您已经指定了错误to_field,应该是BusinessType类,在数据库中列的不是名称的CategoryID字段的名称:

category = models.ForeignKey(BusinessTypes, to_field='categoryID') 

要在BusinessTypesSubSerializer显示类别,你可以从这里定义的几个选项中进行选择:http://www.django-rest-framework.org/api-guide/relations/。例如。为StringRelatedField,您将定义:

class BusinessTypesSubSerializer(serializers.ModelSerializer): 
    category = serializers.StringRelatedField(read_only=True) 

    class Meta: 
     model = BusinessTypesSub 
     fields = ('categoryID', 'category', 'subcategoryID', 'subcategory') 
+0

当我尝试外键约束添加到BusinessTypesSub我收到以下错误信息:在“字段列表未知列“business_types_sub.category_id” – user2694306