2016-07-05 84 views
1

我有一個seializer類Django的REST框架序列上POST請求

class StudentJournalSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = StudentJournalModel 
     fields = (
      'value', 
      'date', 
      'discipline', 
      'para_number', 
      'student', 
      'is_module' 
     ) 

這我不能去上班,因爲我需要它失敗。 我希望它不顯示ForeignKey字段的pk值,但實際的字段值加上這個類也應該適用於post方法。

我通常用來增加:

student = serializers.CharField(
    source='student.username' 
) 
discipline = serializers.CharField(
    source='discipline.discipline' 
) 
para_number = serializers.CharField(
    source='para_number.para_position' 
) 

但是,僅與GET read_only=True

的作品,但我需要POST請求中使用它從客戶端應用程序來創建數據庫中的新對象,所以它顯然不會工作。我讀過,我需要編寫.create()方法來處理這種情況,但我真的不明白它是如何工作的以及我需要在那裏覆蓋哪些內容,所以如果有人能解釋它應該是什麼以及爲什麼,我會非常感激。

附加代碼的型號還有:

class StudentJournalModel(models.Model): 

    value = models.CharField(
     max_length=55, 
     blank=True, 
     null=True, 
     verbose_name="Value", 
     default='' 
    ) 
    date = models.DateField(
     verbose_name="Date" 
    ) 
    discipline = models.ForeignKey(
     'department.Disciplines', 
     verbose_name="Discipline" 
    ) 
    para_number = models.ForeignKey(
     'department.ParaTime', 
     verbose_name="Class #" 
    ) 
    student = models.ForeignKey(
     User, 
     verbose_name="Student" 
    ) 
    is_module = models.BooleanField(
     verbose_name="Module value" 
    ) 

    def __unicode__(self): 
     return u"%s, %s, %s" % (self.date, self.discipline, self.student.get_full_name()) 

回答

1

您正在尋找SlugRelatedField

請注意,您需要確保slug字段具有唯一約束。

+0

什麼是queryset等於在我的案件? –

+0

除非你需要設置一些限制,它會是 .objects.all() – Linovia

+0

我想我已經知道了。謝謝 –

0

如果你想揭露它足以模型中的所有領域只是說:

class StudentJournalSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = StudentJournalModel 
     depth = 1 

從文檔:深度選項應被設置爲一個整數值表示的關係,應該是深度在返回到平面表示之前遍歷。

這將工作以獲取嵌套的資源,對於POST,您將需要發送相關字段的ID,它應該足以創建新的對象。學生,學科和para_number應該已經存在於數據庫中,如果它們中的任何一個也應該創建,那麼你需要自己寫.create()方法看看這個很好的例子docs

相關問題