Использование поля метода сериализатора для доступа к информации FK

Я использую вложенный сериализатор DRF с возможностью записи для создания нескольких объектов одновременно :

class NestedDocumentLocationSerializer(WritableNestedModelSerializer):

    # organisme_name = serializers.SerializerMethodField(source='organisme.nom')

    nda = DocumentSerializer(allow_null=True, required=False)
    kbis = DocumentSerializer(allow_null=True, required=False)
    qualiopi = DocumentSerializer(allow_null=True, required=False)
    rib = DocumentSerializer(allow_null=True, required=False)
    contrat = DocumentSerializer(allow_null=True, required=False)

    class Meta:
        model = DocumentLocation
        fields = ['location', 'nda', 'kbis', 'qualiopi', 'rib', 'contrat']

        # extra_kwargs = {
        #     'organisme_name': {'read_only': True}
        # }

    # def get_organisme_name(self, obj):
    #     return obj.location.organisme.nom

Часть создания работает отлично, но когда дело доходит до моего местоположения, отображается только ID :

{
    "location": 2,
    "nda": {
        "id": 136,
        "nom": "ça fonctionne ?",
        "description": "ça fonctionne ?",
        "chemin": "ça fonctionne ?",
        "stockage_interne": false
    },
    "kbis": {
        "id": 137,
        "nom": "ça fonctionne ?",
        "description": "ça fonctionne ?",
        "chemin": "ça fonctionne ?",
        "stockage_interne": false
    },
    "qualiopi": {
        "id": 138,
        "nom": "ça fonctionne ?",
        "description": "ça fonctionne ?",
        "chemin": "ça fonctionne ?",
        "stockage_interne": false
    },
    "rib": {
        "id": 139,
        "nom": "ça fonctionne ?",
        "description": "ça fonctionne ?",
        "chemin": "ça fonctionne ?",
        "stockage_interne": false
    },
    "contrat": {
        "id": 140,
        "nom": "ça fonctionne ?",
        "description": "ça fonctionne ?",
        "chemin": "ça fonctionne ?",
        "stockage_interne": false
    }
}

Итак, я хочу использовать SerializerMethodfield для получения нужной мне информации: название организации, телефон и email пользователя.

Вот модели:

class DocumentLocation(models.Model):

    location = models.ForeignKey('location.Location', on_delete=models.SET_NULL, null=True)
    nda = models.ForeignKey('document.Document', on_delete=models.SET_NULL, null=True, related_name="document_nda")
    kbis = models.ForeignKey('document.Document', on_delete=models.SET_NULL, null=True, related_name="document_kbis")
    qualiopi = models.ForeignKey('document.Document', on_delete=models.SET_NULL, null=True,
                                 related_name="document_qualiopi")
    rib = models.ForeignKey('document.Document', on_delete=models.SET_NULL, null=True, related_name="document_rib")
    contrat = models.ForeignKey('document.Document', on_delete=models.SET_NULL, null=True,
                                related_name="document_contrat")
class Location(models.Model):
    class Meta:
        verbose_name_plural = 'locations'

    organisme = models.ForeignKey(to=Organisme, on_delete=models.SET_NULL, null=True, related_name="organisme")
    siret = models.IntegerField(null=True)
    nda = models.IntegerField(null=True)
    certification = models.ForeignKey(to="certification.Certification", on_delete=models.SET_NULL, null=True,
                                      related_name="certification")
    date_ouverture = models.DateField(default=datetime.date.today, null=True)
    commentaire = models.TextField(null=True)
class Organisme(models.Model):
    class Meta:
        verbose_name_plural = 'organismes'

    def __str__(self):
        if self.nom is not None:
            return self.nom
        return "nom non définit"

    nom = models.CharField(max_length=120, null=True)
    utilisateur = models.OneToOneField('utilisateur.Utilisateur', null=True, on_delete=models.SET_NULL)
    adresse = models.CharField(null=True, max_length=180)
    code_postal = models.IntegerField(null=True)
    ville = models.CharField(null=True, max_length=120)
    pays = models.CharField(null=True, default='France', max_length=120)
    site_web = models.URLField(null=True)
    avatar = models.OneToOneField('compte.Avatar', null=True, on_delete=models.SET_NULL,
                                  related_name='organismes')
    telephone = models.IntegerField(null=True)
class Utilisateur(AbstractUser):
    username = None
    email = models.EmailField('adresse email', max_length=80, unique=True)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

    objects = CustomUserManager()

    def __str__(self):
        return self.email

Как вы можете видеть, я пытался использовать мое поле SerializerMethodfield, с параметром источника или без него, и мое def get_organisme_name с разными попытками, но я продолжаю получать 'NoneType' object has no attribute 'nom'

Спасибо за помощь.

Вернуться на верх