SORU
28 Ocak 2013, PAZARTESİ


Ne kadar ilgili model alanlar Django Rest Çerçeve kullanarak dahil mi?

Ben şu modeli var ki:

class Classroom(models.Model):
    room_number = [....]

class Teacher(models.Model):
    name = [...]
    tenure = [...]
    classroom = models.ForeignKey(Classroom)

Hadi bu gecelik gibi bir sonuç almak yerine ManyRelatedPrimaryKeyField işlevi olduğunu söylüyor:

{
    "room_number": "42", 
    "teachers": [
        27, 
        24, 
        7
    ]
},

tam ilgili model gösterimini içeren bir şey gibi dönüş var:

{
    "room_number": "42", 
    "teachers": [
        {
           'id':'27,
           'name':'John',
           'tenure':True
        }, 
        {
           'id':'24,
           'name':'Sally',
           'tenure':False
        }, 
    ]
},

Bu mümkün mü? Eğer öyleyse, nasıl? Ve bu kötü bir fikir mi?

CEVAP
29 Ocak 2013, Salı


En basit yolu the depth argument kullanmaktır

class ClassroomSerializer(serializers.ModelSerializer):
    class Meta:
        model = Classroom
        depth = 1

Ancak, bu sadece öğretmenlerin alan ters bir ilişki olduğundan bu durumda sana lazım değil, ileriye, ilişkiler, ilişkiler de dahildir.

Eğer daha karmaşık gereksinimleri (örn. varsa ters ilişki vardır, bazı alanlarda yuva, ama diğerleri, ya da yuva alanları belirli bir alt değil) 15**, örn

class TeacherSerializer(serializers.ModelSerializer):
    class Meta:
        model = Teacher
        fields = ('id', 'name', 'tenure')

class ClassroomSerializer(serializers.ModelSerializer):
    teachers = TeacherSerializer(source='teacher_set')

    class Meta:
        model = Classroom

Seri hale getirici alanını kaynağı olarak kullanmak için öznitelik belirtmek için kaynak bağımsız kullanıyoruz unutmayın. Teacher model, yani on related_name seçeneğini kullanarak yerine teachers öznitelik sağlayarak source bağımsız uğrayabiliriz. classroom = models.ForeignKey(Classroom, related_name='teachers')

Akılda tutulması gereken bir şey iç içe serializers şu anda yazma işlemleri desteklemez. Yazılabilir gösterimleri için, normal düz beyan, pk ya da köprü gibi kullanmalısınız.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ben Schoon

    Ben Schoon

    23 Kasım 2012
  • placeboing

    placeboing

    7 Mart 2006
  • Tube Time

    Tube Time

    14 Mayıs 2013