Насколько я понимаю, вы пытаетесь установить отношения M2M в django-nonrel, что не является готовой функциональностью. Для начала, если вам нужен быстрый взлом, вы можете воспользоваться этим простым классом и использовать CharField
для ввода внешних ключей вручную:
class ListFormField(forms.Field):
""" A form field for being able to display a djangotoolbox.fields.ListField. """
widget = ListWidget
def clean(self, value):
return [v.strip() for v in value.split(',') if len(v.strip()) > 0]
Но если вы хотите иметь множественный выбор из списка моделей, обычно вам нужно использовать ModelMultipleChoiceField, который также не работает в django-nonrel. Вот что я сделал для эмуляции отношения M2M с использованием MultipleSelectField:
Допустим, у вас есть отношения M2M между 2 классами, SomeClass и AnotherClass соответственно. Вы хотите выбрать отношение в форме для SomeClass. Также я предполагаю, что вы хотите хранить ссылки как ListField в SomeClass. (Естественно, вы хотите создать отношения M2M, как они объяснены здесь , для предотвращения взрыва индексов, если вы работаете в App Engine).
Итак, у вас есть такие модели, как:
class SomeClass(models.Model):
another_class_ids = ListField(models.PositiveIntegerField(), null=True, blank=True)
#fields go here
class AnotherClass(models.Model):
#fields go here
И в вашей форме:
class SomeClassForm(forms.ModelForm):
#Empty field, will be populated after form is initialized
#Otherwise selection list is not refreshed after new entities are created.
another_class = forms.MultipleChoiceField(required=False)
def __init__(self, *args, **kwargs):
super(SomeClassForm,self).__init__(*args, **kwargs)
self.fields['another_class'].choices = [(item.pk,item) for item in AnotherClass.objects.all()]
if self.instance.pk: #If class is saved, highlight the instances that are related
self.fields['another_class'].initial = self.instance.another_class_ids
def save(self, *args, **kwargs):
self.instance.another_class_ids = self.cleaned_data['another_class']
return super(SomeClassForm, self).save()
class Meta:
model = SomeClass
Надеюсь, это поможет вам начать, я реализовал эту функциональность для обычных форм, настроить ее для панели администратора не должно быть так сложно.