如何获取ForeignKey模型字段

时间:2015-09-04 16:34:40

标签: python django django-models

在Django 1.8中

class OtherModel(models.Model):
    somefield = models.CharField(max_length=20)

class Orderform(models.Model):
    sell_item_id = models.CharField(max_length=20)

class Selled(models.Model):
    orderform = models.ForeignKey("Orderform")
    sell_count = models.IntegerField()
    something = OtherModel.objects.get(id=sell_item_id)

我需要使用类似OtherModel.objects.get(id=sell_item_id)的内容。

如何在sell_item_id中获取class Selled(models.Model):

2 个答案:

答案 0 :(得分:1)

您的架构无法在SQL中显示。

选项#1:

class Orderform(models.Model):
    sell_item_id = models.CharField(max_length=20)
    othermodel = models.OneToOneField("OtherModel")

得到它

Selled.objects.get(pk=1).orderform.othermodel

选项#2:

class Selled(models.Model):
    orderform = models.ForeignKey("Orderform")
    sell_count = models.IntegerField()

    def something(self):
        return OtherModel.objects.get(id=self.sell_item_id)

并获取

Selled.objects.get(pk=1).something()

但我认为你应该更好地考虑一下数据库架构。

答案 1 :(得分:0)

看起来你有几个问题,第一个是获得相关的

item

请注意Selled.objects.filter(order_form__sell_item_id =id_to_get).select_related('order_form') 之前的__(双下划线)。这很重要,因为它说sell_item_id Selleed选择了sell_item_id。并且OrderForm确保通过一次调用db来将订单表单带回结果中。

现在,如果您想对select_related执行此操作,则需要在OtherModel中创建一个类似的ForeignKey字段,这样您就可以进行与上述相同的查询。目前,你没有这种关系。

OtherNodel

别忘了跑:

class OtherModel(models.Model):
    somefield = models.CharField(max_length=20)
    orderform = models.ForeignKey("Orderform")

OtherModel.objects.filter(order_form__sell_item_id =id_to_get).select_related('order_form')

这应该可以解决问题。