Djangoフォームエラー:<ul class = "errorlist"> <li> language <ul class = "errorlist"> <li>値のリストを入力してください。</ li> </ ul> </ li> </ ul>

マニッシュ

これが私の見解です。新しいものを作成して古いものを取得できるように、チェックボックスではなくテキストを介してmanytomanyfieldを追加したいと思います。ユーザーに各言語をスペースで分割してもらいたい

class CreateBooksView(LoginRequiredMixin,CreateView):
    login_url = "/books/login"
    form_class = CreateBooksForm
    template_name = "books/create.html"
    success_url = reverse_lazy('home')


    def form_valid(self,form):
        tag_list=[]
        books = form.save(commit=False)
        books.author = self.request.user
        tags = form.cleaned_data['language']
        print(tags)
        tag_list=[Language.objects.get_or_create(name=tag)[0] for tag in 
        tags.split()]
        for tag in tag_list:
            a = books.language.add(tag)
        books.language = a    
        books.save()
        return super(CreateBooksView,self).form_valid(form)


    def form_invalid(self,form):
        print (form.errors)
        return super(CreateBooksView,self).form_invalid(form) 

from django import forms
from books.models import Book
class CreateBooksForm(forms.ModelForm):
    class Meta:
        model = Book
        fields = "name","about","language","image"
        widgets = {
            'language': forms.Textarea(attrs={'cols': 80, 'rows': 2}),

これが私のモデルです。したがって、フィルタリングしたいManytoManyFieldは言語です。

class Language(models.Model):
    name= models.CharField(max_length=100)

    def __str__(self):
        return self.name

class Book(models.Model):
    name=models.CharField(max_length=200) 
    about =models.TextField()
    image = models.ImageField(upload_to=upload_image)  
    language = models.ManyToManyField(Language,related_name='book') 
    author = models.ForeignKey(User,on_delete=models.PROTECT,related_name='bauthor')
    def __str__(self):
        return self.name  


    class Meta:
        ordering = ('-pk',)
クリス

の言語フィールドにModelFormは、文字列ではなくIDのリストが必要です。私が提案するのは、あなたから言語フィールドを取り出しModelForm、タグを処理するために非モデルフィールドを追加することです。

#forms.py

class CreateBooksForm(forms.ModelForm):

    tags = forms.CharField(widget=forms.Textarea(attrs={'cols': 80, 'rows': 2}))

    class Meta:
        model = Book
        fields = "name","tags", "about","image"

次に、ビュー内のタグを処理します

...

def form_valid(self,form):
    tag_list=[]
    books = form.save(commit=False)
    books.author = self.request.user
    tags = form.cleaned_data['tags']
    books.save() # must be save before adding m2m
    tag_list=[Language1.objects.get_or_create(name=tag)[0] for tag in tags.split()]

    for tag in tag_list:
        a = books.language.add(tag) 
    books.save()
    return super(CreateBooksView,self).form_valid(form)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ