2016-11-11 48 views
1

我在序列化程序上使用depth = 1来显示外键字段的详细信息。但是,它也显示了我并不需要的另一个外键领域的细节。我如何显示一个字段的细节,但不显示另一个字段的细节?如何在Django Rest Framework中显示单个字段的深度?

+0

我认为你不能用'深度'来做这件事,根据我的经验,我总是用另一个串行器自定义外键字段,不使用'深度',那么你可以控制哪个字段将显示细节,哪些字段不会。 – Enix

+0

谢谢@Enix。你能否给我一个参考资料,我可以按照你刚才的解释去做? – MiniGunnR

回答

4

仅供参考

假设你有三种型号:

class User(model.Model): 
    username = model.CharField('username', max_length=10) 

class Question(model.Model): 
    title = models.CharField('title', max_length=10) 

class Answer(model.Model): 
    user = model.ForeignKey(User) 
    question = model.ForeignKey(Question) 
    body = model.TextField('the answer body') 

而你需要连载Answer,与显示的Question的细节,但没有显示的User的细节,那么你可以定义您的序列号:

class QuestionSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Question 
     exclude = [] 

class AnswerSerializer(serializers.ModelSerializer): 
    question = QuestionSerializer(many=False, read_only=True) 
    class Meta: 
     model = Answer 
     exclude = [] 

当您序列号AnswerAnswerSerializer,你会注意到question字段是同时序列化的,但是user字段仍然是一个没有序列化的整数。

如果您需要序列化一个外键,您可以明确地在序列化程序中定义一个字段,并且字段名称等于model中的字段名称,并且该值等于外键模型序列化程序。在这种情况下,模型是连续的,Answer,这种情况下的外键字段question将被“扩展”为QuestionSerializer,并且在这种情况下其他外键字段仍然保留原始外键值,如果您避风港的话,则为user没有明确定义串行器中的串行器字段。

希望它会有所帮助。

相关问题