简体   繁体   English

如何在没有外键的情况下使用 DRF 与另一个表建立关系

[英]How to do a relationship using DRF to another table without foreignKey

I can not do relatioships between two tables without relationships.我不能做没有关系的两个表之间的关系。

My models are :我的模型是:

class exampleModel(models.Model):
    quantity         = models.IntegerField(blank=False, null=True)
    comment          = models.CharField(max_length=100 , blank=True, null=True)
    class Meta:
        db_table = "example"
class Logger(models.Model):
    id_table = models.IntegerField() 
    table    = models.CharField(max_length=20 , blank=True, null=True) 
    comment  = models.CharField(max_length=100 , blank=True, null=True)  
    action   = models.CharField(max_length=100 , blank=True, null=True)
    date_created     = models.DateTimeField(auto_now_add=True)  
    class Meta:
        db_table = "logger"

I already have filled logger Model, but , I have not be able made the exampleSerializer .我已经填充了记录器模型,但是,我无法制作exampleSerializer

My serializers are:我的序列化程序是:

 class LoggerSerializer(serializers.ModelSerializer):
    class Meta:
       db_table = u'logger'
       model    = Logger
       fields   = '__all__'
class exampleSerializer(serializers.ModelSerializer):
    last_log = LoggerSerializer(read_only=True)
    class Meta:
        db_table = 'example'
        model = ExampleModel
        fields = ( 'id' , 'last_log' , 'quantity')

in logger saves :在记录器中保存:

id_table : 'primary key of example',
table : 'example'
comment : 'custom comment',
action : "CRUD"

You can query last logger in view, then pass it to serializer in context.您可以查询视图中的最后一个记录器,然后将其传递给上下文中的序列化程序。 Then do something like:然后执行以下操作:

class exampleSerializer(serializers.ModelSerializer):
    last_log = serializers.SerializerMethodField()

    class Meta:
        db_table = 'example'
        model = ExampleModel
        fields = ('id', 'last_log', 'quantity')

    def get_last_log(self, obj):
        last_log = obj.state(self.context['last_log'])
        last_log_serializer = LoggerSerializer(last_log)
        return last_log_serializer.data

You pass to context, with something like:您传递给上下文,例如:

exampleSerializer(queryset, context ={'last_log': last_log_object})

Also You can do the query in exampleSerializer :您也可以在exampleSerializer进行查询:

class exampleSerializer(serializers.ModelSerializer):
    last_log = serializers.SerializerMethodField()

    class Meta:
        db_table = 'example'
        model = ExampleModel
        fields = ('id', 'last_log', 'quantity')

    def get_last_log(self, obj):
        logger_queryset =Logger.objects.filter(table = self.Meta.db_table, id_table = obj.id)
        return  LoggerSerializer(logger_queryset).data

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何在 DRF 中使用 ForiegnKey 关系创建 Db 表 - how can i create Db table using ForiegnKey relationship in DRF 使用 DRF ModelSerializer 序列化 ForeignKey 的反向关系 - Serializing reverse relationship of a ForeignKey with a DRF ModelSerializer 多对多、外键关系模型中的 DRF 更新插入 - DRF Update Insert in ManytoMany, ForeignKey Relationship Models (DRF) 如何更新外键字段 - (DRF) How to update a foreignkey field 如何通过删除另一个 model 具有外键关系的结果来过滤 Django 查询集? - How do I filter a Django Queryset by removing results in which another model has a ForeignKey relationship? 如何通过在 DRF 中以多对多关系查询另一个相关模型来获取模型对象列表 - How do I fetch a list of model objects by querying another related model in a many to many relationship in DRF 使用多列作为ForeignKey返回另一个表 - Using multiple columns as ForeignKey to return in another table 如何在另一个表Django中引用外键字段 - How references fields that are foreignkey in another table , Django 如何从具有外键关系的另一个模型中检索模型列表 - how to retrieve list of model from another model that has a ForeignKey relationship 如何从具有 ForeignKey 关系的另一个 class 获取数据 - How to get data from another class with ForeignKey relationship
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM