Skip to main content
 首页 » 编程设计

python之使用 Django ORM 查询多对多字段

2024年11月01日33java哥

我正在尝试使用 Django ORM 查询我的 bd,但我需要一些帮助。

模型:

class Participant(models.Model): 
    username = models.CharField(max_length=20) 
    username.primary_key = True 
    #password = models.CharField(max_length=128) 
    work_place = models.CharField(max_length=50) 
    photo = models.FileField(upload_to='user_photo') 
    name = models.CharField(max_length=30) 
    country = models.CharField(max_length=20) 
    phone_number = models.IntegerField(max_length=9) 
    email = models.EmailField(unique = True) 
    qrcode = models.FileField(upload_to = 'qrcodes',null=True,blank=True) 
    contact = models.OneToOneField('Contact', related_name= 'participant_contact') 
    user = models.OneToOneField(User)   
    contacts = models.ManyToManyField('Contact', related_name='contact_list', null=True, blank=True) 
 
 
    def save( self, *args, **kw ): 
        self.username = self.user.username 
        c= Contact() 
        c.save() 
        self.contact = c 
        super( Participant, self ).save( *args, **kw ) 
 
    def __unicode__(self): 
        return self.username 
 
class Contact(models.Model): 
    id = models.AutoField(primary_key=True) 

我需要获取作为给定参与者的联系人的所有参与者

例子:

Contact Table: |  id   | 
               |_______|     
               | 1     |   
               | 2     |  
 
Participant Table: |username|...|participant_contact| 
                   |_______ |___|___________________|                   
                   | test   |   |       1           | 
                   | test2  |   |       2           | 
 
Contacts Relation: |id_Participant1|id_participant_2| 
                   |_______________|________________|                   
                   | 1             | 2              | 
 
 
> p1 = Participant.objects.get(username="test") 
> p2 = Participant.objects.get(username="test2") 

所以 p2 在 p1 联系人列表中。我如何使用 Django ORM 进行此查询?

请您参考如下方法:

正确的解决方法是:

> Participant.objects.filter(contact__in= p1.contacts.all())