0

django-selectableプラグインを使用しています。ドキュメントから:

モデルに基づくルックアップから拡張されたルックアップの場合、新しく作成されたアイテムはまだデータベースに保存されておらず、保存はフォームで処理する必要があります

モデル:

class UserSettings(models.Model):
   user = models.ForeignKey(UserProfile, related_name='own_user')
   lookup_user = models.ManyToManyField(UserProfile, related_name='other_user')
   category = models.ManyToManyField(NewsCategory)
   tag = models.ManyToManyField(Tag)

形:

class UserSettingsForm(forms.ModelForm):
    category = TreeNodeChoiceField(
    required=False,
    queryset=NewsCategory.objects.filter(status=True, is_deleted =False), label=u"Kategori", widget=forms.SelectMultiple(attrs={'class':'uniformselect'})
    )
    class Meta:
        model = UserSettings
        exclude = ['user']
        widgets = {
            'lookup_user': selectable.AutoCompleteSelectMultipleWidget(lookup_class=UserLookUp,),
            'tag': selectable.AutoCompleteSelectMultipleWidget(lookup_class=TagLookUp,),
    }

調べる:

class UserLookUp(ModelLookup):
    model = UserProfile
    search_fields = ('first_name__icontains', )

    filters = {'is_active': True, }

    def get_item_value(self, item):
        return item.get_full_name()

    def get_item_label(self, item):
        return u"(%s)" % (item.get_full_name())

registry.register(UserLookUp)



@login_required
class TagLookUp(ModelLookup):
    model = Tag
    search_fields = ('slug__icontains', )


    def get_item_value(self, item):
        return item.name

    def get_item_label(self, item):
        return u"(%s)" % (item.name)

registry.register(TagLookUp)

および表示:

def user_settings(request):
    try:
       set = UserSettings.objects.filter(blabla)[0]
    except:
       set = None
    if request.method == 'POST':
        form = UserSettingsForm(request.POST)
        if form.is_valid():
            obj = form.save(commit=False)
            obj.user = user
            obj.save()
            form.save_m2m()
            return HttpResponseRedirect('/')
    else:
        form = UserSettingsForm(instance=set)
    return render_to_response('main/settings.html', {'form':form,},
                              context_instance=RequestContext(request))

エラー:

TypeError at /news/settings/
int() argument must be a string or a number, not 'list'
Request Method: POST
Request URL:    http://localhost:8000/news/settings/
Django Version: 1.4
Exception Type: TypeError
Exception Value:    
int() argument must be a string or a number, not 'list'
Exception Location: /Library/Python/2.7/site-packages/django/db/models/fields/__init__.py in get_prep_value, line 537

django-selectable では、このビューでフォームを保存できませんでした。このプラグインでフォームを保存するにはどうすればよいですか?

前もって感謝します

4

1 に答える 1

0

これを置き換えることでこの問題を解決しました:

category = TreeNodeChoiceField(
    required=False,
    queryset=NewsCategory.objects.filter(status=True, is_deleted =False), label=u"Kategori", widget=forms.SelectMultiple(attrs={'class':'uniformselect'})
    )

これで:

category = forms.ModelMultipleChoiceField(queryset=NewsCategory.objects.filter(parent__isnull=False, status=True, is_deleted=False)
于 2013-10-29T22:19:36.630 に答える