首页 > 解决方案 > Django ModelAdmin 表单表单验证

问题描述

我是一个新鲜的 django newb,并试图弄清楚如何在 ModelForm 中获取对象主键。

我要做的是验证插入表单的数据是否在数据集中任何其他对象的 5 米范围内。我正在尝试在管理站点中执行此操作。

添加新“地点”时,以下内容完美运行,但我在尝试更改和现有“地点”时遇到问题。问题是验证总是在对象注释中发现。

class PlaceAdminForm(forms.ModelForm):
    class Meta:
        model = Place
        fields = "__all__"

    def clean(self):
        pnt = self.cleaned_data["location"]
        for place in Place.objects.annotate(distance=Distance("location", pnt)):
        if place.distance <= 5:
            raise forms.ValidationError("Another Place within 5m")

@admin.register(Place)
class PlaceAdmin(admin.ModelAdmin):
    form = PlaceAdminForm

我想这样做的方式是通过某种方式从更改视图中获取“主键”并能够过滤“pk”上的 Place.object。

标签: django-formsdjango-admin

解决方案


推荐阅读