我使用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()
这些也是我的Product
和HeadFlowDataset
模型:
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
对象前面都有一个复选框。但是检查和保存不起作用。我也找不到任何其他方法来使这个工作。有人能告诉我一个方法来做这个吗?
1条答案
按热度按时间mspsb9vt1#
由于您将 commit 设置为False,因此在默认情况下不会运行删除和保存等操作。如果您有删除权限,则可以使用formset.deleted_objects迭代并删除它们