Python 如何在遗留数据库中的Django中进行内部联接?

Python 如何在遗留数据库中的Django中进行内部联接?,python,django,django-models,Python,Django,Django Models,很抱歉问这么简单的问题,但我是Django的新手,真的很困惑 我有一个丑陋的遗产表,我不能改变。 它有两个表: 因此,我想我不能在类定义中添加外键,因为它们会更改表 我需要执行这样的sql请求: 如何使用Django ORM实现它? 或者我可以让销售人员单独购物 根据您的示例查询,您的表是否实际命名为salersons/Store? 无论如何,这样的方法应该会奏效: results = Salespersons.objects.extra(tables=["Store"],

很抱歉问这么简单的问题,但我是Django的新手,真的很困惑

我有一个丑陋的遗产表,我不能改变。 它有两个表:

因此,我想我不能在类定义中添加外键,因为它们会更改表

我需要执行这样的sql请求:

如何使用Django ORM实现它? 或者我可以让销售人员单独购物


根据您的示例查询,您的表是否实际命名为salersons/Store? 无论如何,这样的方法应该会奏效:

results = Salespersons.objects.extra(tables=["Store"],
                          where=["""Salespersons.xsin = Store.xsin"""])

然而,鉴于表/模型的名称,我认为内部联接在逻辑上并不正确。除非每家商店总是只有一名销售人员使用相同的xsin。

我不明白为什么即使数据库缺少约束也不能使用models.ForeignKey字段-如果不显式执行SQL来更改数据库,那么表就不会更改。如果使用ForeignKey,则可以使用salersons.objects。选择相关的“xsin”以请求同时获取相关对象。

如果可以使其中一个xsin字段唯一,则可以使用ForeignKey with生成内部联接,如下所示:

class Salespersons(models.Model):
    xsin = models.IntegerField(unique=True)

class Store(models.Model):
    xsin = models.ForeignKey(Salespersons, db_column='xsin', to_field='xsin')

>>> Store.objects.selected_related('xsin')

你能提供一个外键的例子吗?class salersonsmodels.Model:id=models.integerfielddunique=True,primary\u Key=True xsin=models.IntegerField name=models.CharFieldmax\u length=200姓氏=models.CharFieldmax\u length=200 store=models.foreignkeycuster如果我愿意这样做,Django将创建store_id字段,如果我没有正确地解析它,请原谅。我的意思是:商店=模型。ForeignKeyCustomer@gennad:是,它将创建具有FK约束的存储单元id。但你为什么要给客户命名一个FK字段呢?嗯。。。对不起,我不明白。我怎样才能实现使用外键?有更好的方法吗?这取决于你到底想检索什么。xsin是什么意思?它是否指向第三个表?xsin是一个字段,一些表通过它连接。是的,可以加入第三桌。谢谢,真的很有价值。但如果我想在Store类中创建另一个外键该怎么办。此外键将指向另一个表,例如类StoreCredentialsmodels.Model:xsin=models.integerFieldDunique=True。有可能实现吗?
stores = Store.objects.filter(xsin = 1000)
salespersons = Salespersons.objects.filter(xsin = 1000)
results = Salespersons.objects.extra(tables=["Store"],
                          where=["""Salespersons.xsin = Store.xsin"""])
class Salespersons(models.Model):
    xsin = models.IntegerField(unique=True)

class Store(models.Model):
    xsin = models.ForeignKey(Salespersons, db_column='xsin', to_field='xsin')

>>> Store.objects.selected_related('xsin')