2009-11-05 1 views
0

Django 모델에서 원형 OneToMany 관계를 구현했으며 매우 동일한 클래스에서 limit_choices_to 옵션을 사용하려고했습니다.순환 관계에 Django limit_choices_to

아무런 오류나 경고없이 syncdb를 수행 할 수 있지만 한도는 준수하지 않습니다. 내가 수 있어요 사용 쉘은 저장 및 관리에 나는 오류 메시지가 나타납니다. "필드 '형'에 가입하지 허용 당신은 조회 유형 'NEQ'를 잘못 입력 했습니까?"

class AdministrativeArea(models.Model): 
    type = models.CharField(max_length=1, choices=choices.ADMIN_AREA_TYPES) 
    name = models.CharField(max_length=60, unique=True) 

    parent = models.ForeignKey('AdministrativeArea', 
           null=True, 
           blank=True, 
           limit_choices_to = Q(type__neq='p') & Q(type__neq=type) 
    ) 

limit_choices_to 옵션의 기본 개념은 다른 AdministrativeArea와 부모가 현재 AdministrativeArea 유형과 같은 유형이 될 수 없습니다 ofr를 모든 종류의 "P"는 부모가 될 수 없음을 보장하는 것입니다.

나는 장고를 처음 접했고 ... 나는 무엇을 놓치고 있습니까?

감사

답변

0

당신은 기존의 모델 인스턴스와 작업 할 때 동적으로 특정 분야의 검색어 세트를 조정하는 모델 양식을 만들 수 있습니다.

### in my_app/models.py ### 

class AdministrativeArea(models.Model): 
    type = models.CharField(max_length=1, choices=choices.ADMIN_AREA_TYPES) 
    name = models.CharField(max_length=60, unique=True) 

    parent = models.ForeignKey('AdministrativeArea', 
          null=True, 
          blank=True, 
          limit_choices_to = Q(type__neq='p') 
) 


### in my_app/admin.py ### 

from django.contrib import admin 
import django.forms as forms 
from my_app.models import AdministrativeArea 

class class AdministrativeAreaAdminForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
    super(AdministrativeAreaAdminForm, self).__init__(*args, **kwargs) 
    instance = kwargs.get('instance', None) 
    if instance is not None: 
     parentField = self.fields['parent'] 
     parentField.queryset = parentField.queryset.filter(type__neq=instance.type) 

    class Meta: 
    model = AdministrativeArea 


class AdministrativeAreaAdmin(admin.ModelAdmin): 
    form = AdministrativeAreaAdminForm 

필터링이 필요한 경우 해당 양식을 관리 사이트 외부에서도 사용할 수 있습니다.