Admin action- queryset 应用多对多

Admin action- queryset to apply Many to Many

如何使用管理操作创建将应用多对多值的查询集?

我知道 'value' 必须已经存在(在我的例子中,颜色本身必须存在)。

型号

class Colours(models.Model):
    colour_name = models.CharField(max_length=50)

class Car(models.Model):
    brand = models.CharField(max_length=200)
    available_colours = models.ManyToManyField(Colours, blank=True)

Admin.py

class CarAdmin(admin.ModelAdmin):
    actions = ['Red']

尝试 1:仅适用于 FK

def Red(self, request, queryset):
        queryset.update(colour=Colour.objects.get(colour_name__iexact='Red'), updated=timezone.now())

尝试 2:失败

def Red(self, request, queryset):
    queryset.update = self.model._meta.app_label, self.model._meta.model_name

你可以assign relations sets in django

def Red(self, request, queryset):
    red_color = Colour.objects.get(colour_name__iexact='Red')
    queryset.update(available_colours=[red_color])

根据您的评论和 docs,django 似乎不支持对多对多字段进行批量更新。

你可以这样解决:

def Red(self, request, queryset):
    red_color = Colour.objects.get(colour_name__iexact='Red')
    for car in queryset:
        car.available_colours.add(red_color)