Django serialization get foreign key table value istead of id
Недавно я начал изучать фреймворк django и я застрял в этой ситуации, пытался читать документацию, но мой недостаток опыта не позволяет мне понять многое, есть ли способ получить ответ, как мы хотели, сохраняя проверки, валидацию по умолчанию django, насколько это возможно. Я пытался использовать def to_representation но все равно он дает мне ответ как null, когда я отлаживаю.
пример использования: У меня есть модель, описанная ниже, я хочу, чтобы значение внешнего ключа было текстом, который хранится в таблице status_lookup.name из таблицы product
class product_serializer(serializers.ModelSerializer):
status = status_lookup_serializer(read_only=True,many=False)
class Meta:
model = product
fields = ('id','name','status_id','status')
model.py
class status_lookup(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=30)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(blank=True)
activation_date = models.DateTimeField(auto_now_add=True)
deactivation_date = models.DateTimeField(blank=True,default=None)
def __str__(self):
return self.name
class product(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=30)
img_url = models.CharField(max_length=255,blank=True)
status_id = models.ForeignKey(status_lookup, related_name='status', on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(blank=True)
activation_date = models.DateTimeField(auto_now_add=True)
deactivation_date = models.DateTimeField(blank=True,default=None)
def __str__(self):
return self.name
Я хочу
[
{
"id":1,
"name":"xxx",
"status":pending
}
]
Проверьте, может это вам поможет. это ссылка на документацию по Django-rest-framework
https://www.django-rest-framework.org/api-guide/serializers/
Я смог сделать это с помощью этого Я не знаю, является ли это оптимальным способом сделать это или нет, но буду держать этот вопрос открытым, пока не найду его или кто-нибудь не ответит.
class statusField(serializers.RelatedField):
def to_representation(self, value):
return {
'name':value.name
}
class product_serializer(serializers.ModelSerializer):
status_id = statusField(many=False,read_only=True)
class Meta:
model = product
fields = ('id','name','status_id')