2014-03-06 29 views
0

您好我需要添加一個2級參考項目的序列化程序中的字段。django休息序列化級別2字段

我有以下型號:

model.py:

class Company(models.Model): 
    companyName = models.CharField(max_length=50, blank=True) 

class Poll(models.Model): 
    questionString = models.CharField(max_length=500, blank=True) 
    companyId = models.ForeignKey(Company, null=True, db_column='companyId', blank=True) 

class PossibleAnswer(models.Model): 
    answerString = models.CharField(max_length=100, blank=True) 
    pollId = models.ForeignKey(Poll, null=True, db_column='pollId', blank=True,related_name='answers') 
    token = models.CharField(max_length=10, blank=True) 

serializers.py:

class PossibleAnswerSerializer(serializers.ModelSerializer): 
    #companyId = serializers.RelatedField() 
    class Meta: 
     model = PossibleAnswer 
     fields = ('answerString', 'token', 'pollId', 'companyId') 

我想打一個串行的,有一個領域的PossibleAnswer對象命名公司。如何做出這個參考?類似於:django查詢集過濾器中的pollId__companyId。

+1

這不是一個好主意來命名你的Django FKEY場'pollId'-字段將包含一個'Poll'對象,而不是一個ID。 –

+0

你需要寫信給該字段還是隻讀? – Drewness

+0

我認爲,它可以是隻讀的。我需要使用companyId創建一個自定義權限來檢查某個用戶是否可以創建PossibleAnswer。 –

回答

1

我這個字段是隻讀的,你可以通過serializers.Field來輕鬆實現,它接受到源的虛線路徑。

你的串行器將是:

class PossibleAnswerSerializer(serializers.ModelSerializer): 
    companyId = serializers.Field(source='pollId.companyId') 
    class Meta: 
     model = PossibleAnswer 
     fields = ('answerString', 'token', 'pollId', 'companyId') 

我也與埃裏克同意,命名模型Id屬性是即使DB表示僅僅是ID是一個壞主意。

+0

謝謝Denis! –

1

另一種解決方案...

class PossibleAnswerSerializer(serializers.ModelSerializer): 
    companyId = serializers.SerializerMethodField() 

    def get_companyId(self, obj): 
     return obj.pollId.companyId 

    class Meta: 
     model = PossibleAnswer 
     fields = ('answerString', 'token', 'pollId', 'companyId',) 
相關問題