Django:[0,1]基数的一对多关系

时间:2016-07-25 14:59:23

标签: python django django-models data-modeling

想象一下有两个模型:

class Service(models.Model):
  key_service_name = models.ForeignKey(Key_service_type, related_name='Service_key_service_names', null=False)
  service_hourly_wage_rate = models.DecimalField(max_digits=5, decimal_places=2, null=True)
  service_amount = models.DecimalField(max_digits=7, decimal_places=2, null=True)

class ServiceAdditionalInfo(models.Model):
  service = models.ForeignKey(Service, related_name='Service_additional_info_services', null=False)
  fixed_price = models.DecimalField(max_digits=8, decimal_places=2, null=True)

在其他信息中,Service类序列化程序具有以下字段描述:

service_additional_info = ServiceAdditionalInfoSerializer(read_only = True, many=False, source = 'Service_additional_info_services')

实际上,0或1个ServiceAdditionalInfo实例可以引用一个Service实例。 序列化器可以理解地返回一个列表,而我肯定更喜欢字典。

我的问题:这是推荐的关系建模方法吗? 如果是这样,是否有一个django内置机制来返回这种情况的字典?

对于后一种情况,我知道如何解决这个问题,但由于我想以预期的方式使用该框架,我很好奇是否有关于建模和序列化器的错过。

1 个答案:

答案 0 :(得分:1)

将您的外键替换为OneToOneField

  

一对一的关系。从概念上讲,这与a类似   ForeignKey与unique = True,但关系的“反向”侧   将直接返回单个对象。

当可以存在一个或多个彼此相关的对象时,这是映射关系的优选方式。

至于生成包含两个模型数据的单个字典,您需要对模型序列化器进行子类化。