首页 > 解决方案 > 如何在 M2M djnago 中获取每个选择的每个 id

问题描述

我想获取所选 imeis 的 ID

class Mobile(models.Model):
    mobile = models.CharField(max_length=20,unique=True)
    quantity = models.IntegerField()
    imei = models.ManyToMany(Imei,on_delete=models.CASCADE)

class Imei(models.Model):
    imei = models.CharField(max_length=13,unique=True)
    active = models.BooleanField(default=True)

如果我选择了 10 个 imei,我想获得所选 imeis 的 10 个 ID!?我试过这种方法,但没有人奏效!

instance.imei__id 
instance.imei.id
instance.imei_id

感谢您的帮助

标签: djangodjango-modelsmany-to-many

解决方案


instance.imei经理。您可以通过以下方式访问Imei对象:

instance.imei.all()  # QuerySet of Imei objects

或者,如果您只对对象的主键 ( pks)感兴趣Imei

instance.imei.values_list('pk', flat=True)  # QuerySet of Imei primary keys

编辑:您可以更新所有值:

instance.imei.all().update(active=False)

例如,您可以在其中运行它CreateView

class MyCreateView(CreateView):
    model = Mobile
    # …

    def form_valid(self, form):
        result = super().form_valid(form)
        self.object.imei.all().update(active=False)
        return result

或“嵌套” ManyToManyField

class MyCreateView(CreateView):
    model = Mobile
    # …

    def form_valid(self, form):
        result = super().form_valid(form)
        Imei.objects.filter(selectmobile__item=self.object).update(active=False)
        return result

推荐阅读