2016-10-13 4 views
1

私はcontenttypeモデルのデータを示すインラインを持っているので、実際のオブジェクトの代わりにcontent_typeobject_idフィールドがあります。私はexcludeこれらのフィールドをすることができます - これは問題ではないだけでなく、selectedとして実際のオブジェクトをドロップダウンリストに別のPlacesとして取得したいと思います。誰も私に教えてもらえますか?どうすればいいですか?フィールドのcontent_typeとobject_idフィールドをadminインラインで実際のオブジェクトに置き換えるにはどうすればよいですか?

モデル:

class Criterias(models.Model): 
    name = ... 

class Places(models.Model): 
    name = ... 

class PlacesToCriterias(models.Model): 
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) 
    object_id = models.PositiveIntegerField() 
    content_object = GenericForeignKey() 

    criteria_group = models.ForeignKey(Criterias) 

管理者:

class CriteriaPlacesInlineAdmin(admin.TabularInline): 
    model = PlacesToCriterias 

class CriteriasAdmin(admin.ModelAdmin): 
    inlines = [CriteriaPlacesInlineAdmin] 

admin.site.register(Criterias, CriteriasAdmin) 

私は、CriteriaPlacesInlineAdminformを追加するようなものができます。

class CriteriaPlacesChoicesFieldForm(forms.ModelForm): 
    places = forms.ModelChoiceField(PlaceTypesGroups.objects.all(), label='place') 

が、どのように私はこれにobject_idを追加\渡すことができますform \ queryをドロップダウンリストで 'selected'にするには?

答えて

1

検出された溶液。

admin.TabularInlineにフォームを追加します。

class CriteriaPlacesInlineAdmin(admin.TabularInline): 
    model = PlacesToCriterias 
    form = CriteriaPlacesChoicesFieldForm # <- ADDED FORM 

class CriteriasAdmin(admin.ModelAdmin): 
    inlines = [CriteriaPlacesInlineAdmin] 

admin.site.register(Criterias, CriteriasAdmin) 

フォーム:

class CriteriaPlacesChoicesFieldForm(forms.ModelForm): 
    ct_place_type = ContentType.objects.get_for_model(PlaceTypesGroups) 

    object_id = forms.ModelChoiceField(PlaceTypesGroups.objects.all(), label='places') 
    content_type = forms.ModelChoiceField(ContentType.objects.all(), initial=ct_place_type, widget=forms.HiddenInput()) 

    def clean_object_id(self): 
     return self.cleaned_data['object_id'].pk 

    def clean_content_type(self): 
     return self.ct_place_type 
関連する問題