Как обрабатывать вложенные внешние ключи в django rest - PullRequest
0 голосов
/ 20 июня 2020

Я работаю над API, в котором есть несколько моделей, каждая из которых имеет внешний ключ для своего родителя. Я понял, как писать модели, а также файл сериализатора. Но я не могу понять, как работать с файлом представлений, где я могу POST, а также GET данные на любом уровне. Учебники по DRF довольно сложны с использованием только одной / двух моделей. Вот мой models.py :


    class Plant(models.Model):
        plant_name = models.CharField(max_length=200)
        start_date = models.DateTimeField()
        end_date = models.DateTimeField()
        def __str__(self):
            return(self.plant_name)

    
    class Unit(models.Model):
        plant = models.ForeignKey(Plant, related_name='Units', on_delete=models.CASCADE)
        unit_name = models.CharField(max_length=200)
        unit_location = models.CharField(max_length=200)
        start_date = models.DateTimeField()
        end_date = models.DateTimeField()
        def __str__(self):
            return(self.unit_name)

    
    class EquipmentCategories(models.Model):
        unit = models.ForeignKey(Unit,related_name='Categories',on_delete=models.CASCADE)
        category_name = models.CharField(max_length=200)
        def __str__(self):
            return(self.category_name)

    
    class Equipment(models.Model):
        category = models.ForeignKey(EquipmentCategories,related_name='Equipments', on_delete=models.CASCADE)
        equipment_name = models.CharField(max_length=200)
        def __str__(self):
            return(self.equipment_name)

Я хочу написать файл представлений, чтобы я мог добавлять / просматривать данные на любом уровне. Заранее спасибо за все ответы.

1 Ответ

0 голосов
/ 20 июня 2020

Даже у меня была аналогичная проблема, как у u, для одного уровня ключа Forgien u может получить его из __model_name, но затем я перешел на модуль django -smart-selects, чтобы получить связанные ключи forgien. В вашем случае было бы очень просто, если бы вы использовали django -smart-selects

, это было бы как

query = models.ChainedForeignKey(QueryData,**kwargs)
...