【发布时间】:2014-06-25 19:00:27
【问题描述】:
我有两个模型。我希望第一个模型字段是第二个模型字段的选择列表。但是二级模型的领域并不是唯一的。
想一想,需要重新定义管理表单中的字段
请帮助我实现这一点。我是学django的。
国家模型.py
from django.db import models
from django.contrib.auth.models import User
class Country(models.Model):
class Meta():
db_table = 'country'
country_region = models.CharField(max_length=300)
country_city = models.CharField(max_length=300)
country_district = models.CharField(max_length=300, blank=True, null=True)
客户端模型.py
from django.db import models
from django.contrib.auth.models import User
from client.models import Client
# Create your models here.
class Client(models.Model):
class Meta():
db_table = 'client'
client_name = models.CharField(max_length=300)
client_region = models.CharField(max_length=300) #maybe ForeignKey
我想在 admin 中的 client_region(来自国家/地区)中选择列表(选项)
我正在 admin.py 中尝试
from django.contrib import admin
from country.models import Country
from client.models import Client
class ClientAdmin(admin.ModelAdmin):
def __init__(self, *args, **kwargs):
new_choices = Country.objects.values('country_region').distinct()
super(ClientAdmin.form, self).__init__(*args, **kwargs)
self.field['client_region'].choices = new_choices
# Register your models here.
admin.site.register(Client, ClientAdmin)
我尝试了这段代码,但它不起作用
admin.py
from django.contrib import admin
from timetable.models import Client
from house.models import Country
from django.forms import ModelChoiceField, ModelForm, forms
class ClientForm(ModelForm):
class Meta:
model = Client
def __init__(self, *args, **kwargs):
super(ClientForm, self).__init__(*args, **kwargs)
self.field['client_region'] = forms.ModelChoiceField(queryset=Country.objects.values['county_region'])
class ClientAdmin(admin.ModelAdmin):
list_display = ['client_region']
form = ClientForm
# Register your models here.
admin.site.register(Client, ClientAdmin)
【问题讨论】: