首页 > 解决方案 > Django在多对多中获取外键值

问题描述

对于 Django 来说相对较新,所以这可能很简单,只是缺少了一些东西。鉴于这些模型:


class Manager(models.Model):
    mgrname = models.CharField(max_length=100)
    
class Salesperson(model.Model):
    name = models.CharField(max_length=100)
    mgr_name = models.ForeignKey(SalesMgr,on_delete=models.CASCADE)

class SalesList(models.Model):
    list_description = modesl.CharField(max_length=100)
    list_members = models.ManyToManyFiels('Salesperson')

每个销售人员都被分配了一个经理(只有一个 - 经理有很多销售人员)。我的用户可以创建一个任意联系人列表(“SalesList”),其中包含任意数量的销售人员(销售人员可以属于许多列表。一个列表可能包含许多销售人员)。

我可以检索选定列表中的销售人员列表,但我需要包含销售经理的姓名。

选择列表后如何检索经理姓名?

谢谢!

标签: pythondjango

解决方案


您需要创建一个额外的模型并在 ManytoManyField 中使用“through=new_model”。

class Manager(models.Model):
    mgrname = models.CharField(max_length=100)
    
class Salesperson(model.Model):
    name = models.CharField(max_length=100)
    mgr_name = models.ForeignKey(SalesMgr,on_delete=models.CASCADE)

class SalesList(models.Model):
    list_description = modesl.CharField(max_length=100)
    list_members = models.ManyToManyField('Salesperson', through='Manager')

https://docs.djangoproject.com/en/3.0/topics/db/models/#extra-fields-on-many-to-many-relationships


推荐阅读