2013-10-24 124 views
1
class Model1(models.Model): 
    name = models.CharField(...) 
    ... 
class Model2(models.Model) 
    model = models.OneToOneField(Model1) 
    ... 

我转到管理面板。页面添加一个条目到Model2,观察列表模型。还有Model1的所有记录。 是否可以自定义管理区域,以便列表没有得到已经存在关系的记录。django admin onetoone字段

谢谢

回答

2

应重写_ 初始化窗体类的 _方法。 你可以从下面给出的代码中获得帮助。

 
from django import forms 
from .models import Model2, Model1 

class Model2Form(forms.ModelForm): 
    model1 = forms.ModelChoiceField(queryset=[],) 

    class Meta: 
     model = Model1 

    def __init__(self, *args, **kwargs): 
     """ initialize form data """ 
     super(Model2Form, self).__init__(*args, **kwargs) 
     model2_obj = Model2.objects.all().values_list('model1') 
     model2_list = [data[0] for data in model2_obj] 
     self.fields['model1'].queryset = Model1.objects.exclude(id__in=model2_list) 

在admin.py中。

 
from django.contrib import admin 

from .forms import Model2Form 
from .models import Model2 

class Model2Admin(admin.ModelAdmin): 
    form = Model2Form 
    fields = ['model1'] 
admin.site.register(Model2, Model2Admin) 
+0

现在看到我的答案。 –