django admin onetoone field

时间:2013-10-24 03:43:28

标签: django django-admin

class Model1(models.Model):
  name = models.CharField(...)
  ...
class Model2(models.Model)
  model = models.OneToOneField(Model1)
  ...

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

谢谢

1 个答案:

答案 0 :(得分:2)

您应该覆盖表单类的 _ init _ 方法。 您可以从下面的代码中获取帮助。

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)