【问题标题】:Django ORM relation to a non unique filedDjango ORM 与非唯一字段的关系
【发布时间】:2013-09-29 16:00:45
【问题描述】:

我有一个客户的静态信息

class Customer(models.Model):
    name = models.CharField(max_length=256)

以及他的手机状态的 DWH 样式表以及每日数据:

class Phone(models.Model):
    imei = models.CharField(max_length=64)
    day = models.DateField()
    param1 = models.INtegerField()
    param2 = models.INtegerField()

我的问题是,我可以创建某种“自动”关系吗?外键多对多 客户和使用电话 IMEI 的每日电话记录之间,因为我收集的记录对客户一无所知,我想通过 IMEI 一次将客户连接到所有电话记录,方法是添加某种第三像这样的表

class CutomerIMEI(models.Model):
    customer = models.ForeignKey(Site)
    imei = models.CharField(max_length=64)

所以我可以做 phone.customer 和 customer.phones.filter(day='some day')

谢谢, 谢伊

【问题讨论】:

    标签: django orm


    【解决方案1】:

    我想你快到了,除了我将 CustomerIMEI 上的 imei 字段定义为实际的 ForeignKey - 您可以在目标表中指定要链接到的字段,如下所示:

    imei = models.ForeignKey(Phone, to_field='imei')
    

    现在,您可以使用 CustomerIMEI 作为来自客户的多对多关系的 through 字段:

    phones = models.ManyToManyField(Phone, through=CustomerIMEI)
    

    现在您建议的语法 customer.phones.filter(day='some day') 可以正常工作了。

    【讨论】:

    • 感谢您的快速回复,imei 在Phone 上不是唯一的,因为我每天都有记录,ForeignKey.to_field 在它所属的表上不应该是唯一的吗?
    • 我尝试了你的建议,但我得到了 - CommandError: One or more models didn't validate: cutomerimei: Field 'imei' under model 'Phone' must have a unique=True 约束。
    【解决方案2】:

    您不是在寻找Many-to-Many extra fields 吗?

    【讨论】:

      猜你喜欢
      • 2016-08-06
      • 2019-07-06
      • 2019-08-08
      • 2015-05-04
      • 2018-06-19
      • 2018-11-11
      • 2018-02-24
      • 2019-02-27
      • 2012-12-02
      相关资源
      最近更新 更多