2013-10-24 120 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

現在看到我的答案。 –