У меня есть API, который отправляет некоторые образцы данных.Я пытаюсь изменить представление вывода, используя SerializerMethodField () Django.Но это не работает, как ожидалось, так как я всегда получаю одни и те же данные, а поля не отображаются в моих выходных данных.
У меня есть три модели, которые выглядят так: 2 модели, связанные через внешние ключи:
class Machine(models.Model):
machine_name = models.CharField(max_length=120)
def __str__(self):
return self.machine_name
class Project(models.Model):
project_name = models.CharField(max_length=120)
def __str__(self):
return self.project_name
И одна модель, подобная этой:
class Simulation(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, default=1)
machine = models.ForeignKey(Machine, on_delete=models.CASCADE, default=1)
project = models.ForeignKey(Project, on_delete=models.CASCADE, default=1)
Я создаю данные следующим образом:
test_api_local(method="post", data={"machine":2, "project":1 })
Чего я хотел бы добиться, так это то, что когда я отправляю данные с машиной: 2, он должен записать имя этой машины2 в результат.Как 'machine' : 'machinenametwo'
.
Я попробовал это с помощью SerializerMethodField.Я знаю, что это ReadOnly, но поскольку я на самом деле не изменяю данные, а только манипулирую ими, я подумал, что что-то вроде этого может работать:
class SimulationSerializer(serializers.ModelSerializer):
machine = serializers.SerializerMethodField()
project = serializers.SerializerMethodField()
class Meta:
model = Simulation
fields = ('project',
'machine',
)
def get_machine(self, obj):
print(obj.machine)
project_name = obj.project.project_name
return str(project_name)
Это не работает, так как мой полевой компьютер больше не появляется.Также при отладке (с этим оператором печати) я понимаю, что независимо от того, какие данные я отправляю, он всегда печатает имя моей первой машины.
Если я делаю test_api_local(method="post", data={"machine":2, "project":1 })
, она печатает имя машины1.
Если я сделаю test_api_local(method="post", data={"machine":3, "project":1 })
, то будет напечатано имя машины 1. Такой же результат ....
Поэтому мой вопрос будет такой: я пытаюсь сделать правильный путь?это, и если да, что я делаю не так.
Если это не так, какой будет путь?
Большое спасибо заранее за любую помощь или подсказки!