Django管理表单 - 如何更改动态选择值 [英] Django admin form - how to change dynamically select values

查看:163
本文介绍了Django管理表单 - 如何更改动态选择值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这种情况:
我有模型项目,区域和国家。

I have that situation: I have models Item, Region and Country.

class Item(models.Model):
    name = models.CharField(max_length=255)
    alias = models.SlugField(unique=True)
    country = models.OneToOneField(Country, default=0)
    region = models.OneToOneField(Region, default=0, related_name='')

class Region(models.Model):
    name = models.CharField(max_length=100)
    country = models.ForeignKey(Country, default=0) 

class Country(models.Model):
    name = models.CharField(max_length=100)

当我在管理区域中添加项目并选择国家/地区时,我想自动构建区域选择与区域仅来自所选国家

When I add an item in the admin area and I select country I want to automatically build the region select with Regions only from the selected Country.

我知道如何做javascript,但我不知道在Django中CORRECT是如何做的。

I know how to do it in javascript, but i don't know how CORRECT it is do that in Django.

推荐答案

你需要覆盖干净的会议您的管理员表单的hod:

You need to override the clean method of your admin form:

def clean(self):
    super(CustomItemForm, self).clean() #if necessary
    if 'region' in self._errors:
        """     
        reset the value (something like this i 
        think to set the value b/c it doesnt get set 
        b/c the field fails validation initially)
        """
        region = Region.objects.get(pk=self.data['region'])
        self.initial['region'] = region.id
        self.cleaned_data['region'] = region
        self.region = region

        # remove the error
        del self._errors['region']

    return self.cleaned_data 

这篇关于Django管理表单 - 如何更改动态选择值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆