Из вашей базы данных я не нахожу причин для создания отдельной таблицы для Status
. Если вам все еще нужно создать отдельную таблицу, вы должны управлять отношениями между ними, используя ForeignKey
или OneToOneField
. Это сделает вашу задачу намного проще. Для вашей текущей структуры вы должны будете написать свой сериализатор следующим образом:
class SchemaSerializer(serializer.ModelSerializer):
status = serializer.SerializerMethodField()
def get_status(self, instance):
status = Status.objects.filter(email=instance.email)
if status.exists():
return status.first().status
class Mete:
model = Schema
fields = ('name', 'version', 'email', 'status')
Проще говоря, создайте SerializerMethodField
и определите его логику c получения данных на основе объекта Schema
.
Если вы измените свою модель
class Schema(models.Model):
"""Database model for Schema """
name= models.TextField()
version = models.TextField()
email = models.EmailField(unique = True )
def __str__(self):
return self.email
class Status(models.Model):
""" Model For status """
schema = models. OneToOneField(to=Schema, related_name='schema_status')
status = models.TextField()
def __str__(self):
return self.email
Эта структура поможет вам получить доступ к соответствующему Status
объекту Schema
, например schema_obj.schema_status
, где schema_status
равно related_name
. Вы должны помнить, что это будет работать только тогда, когда у вас есть объект Status
против объекта Schema
. Поэтому я поставил if hasattr(instance, 'schema_status')
нижеприведенный метод serialzer get_status
.
Serializer
class SchemaSerializer(serializer.ModelSerializer):
status = serializer.SerializerMethodField()
def get_status(self, instance):
if hasattr(instance, 'schema_status'):
return instance.schema_status.status
class Mete:
model = Schema
fields = ('name', 'version', 'email', 'status')