Django内联表格管理员:删除不工作的对象

8aqjt8rx  于 2022-12-20  发布在  Go
关注(0)|答案(1)|浏览(116)

我使用Django admin.TabularInline类来添加Foreinkey关系中的多个对象,如下所示:
admin.py:

class HeadFlowDatasetInline(admin.TabularInline):
    model = HeadFlowDataset
    extra = 0

class ProductAdmin(admin.ModelAdmin):
    list_display = (
        ...
    )
    search_fields = (
        ...
    )
    fields = (
        ...
    )
    inlines = [HeadFlowDatasetInline]

    def save_model(self, request, obj, form, change):
        obj.created_by = request.user
        obj.last_updated_by = request.user
        obj.save()

    def save_formset(self, request, form, formset, change):
        instances = formset.save(commit=False)
        for instance in instances:
            instance.user = request.user
            instance.save()

这些也是我的ProductHeadFlowDataset模型:

class Product(models.Model):
    id = models.UUIDField(
        primary_key=True,
        default=uuid.uuid4,
        editable=False,
    )
    main_model = models.ForeignKey(
        MainModel,
        on_delete=models.SET_NULL,
        null=True,
        verbose_name="نام مدل اصلی پمپ",
    )
    usage = models.ManyToManyField(Usage)
    sub_usage = models.ManyToManyField(SubUsage)
    pump_type = models.ForeignKey(
        PumpType,
        on_delete=models.SET_NULL,
        null=True,
        verbose_name="تیپ پمپ",
    )
    pump_name = models.CharField(
        max_length=255,
        null=False,
        blank=False,
        verbose_name="نام محصول",
        unique=True,
    )
    ... # other fields not related to this question.
    
    def __str__(self):
        return self.pump_name

class HeadFlowDataset(models.Model):
    id = models.UUIDField(
        primary_key=True,
        default=uuid.uuid4,
        editable=False,
    )
    product = models.ForeignKey(
        Product,
        on_delete=models.CASCADE,
    )
    head = models.FloatField()
    flow = models.FloatField()

    def __str__(self):
        return self.product.pump_name

对于这个目的,这种方法工作得很好。但是当我试图从add product object页面中删除一个HeadFlowDataset对象时,问题出现了。如下图所示,每个HeadFlowDataset对象前面都有一个复选框。但是检查和保存不起作用。我也找不到任何其他方法来使这个工作。有人能告诉我一个方法来做这个吗?

mspsb9vt

mspsb9vt1#

由于您将 commit 设置为False,因此在默认情况下不会运行删除和保存等操作。如果您有删除权限,则可以使用formset.deleted_objects迭代并删除它们

相关问题