Mi sto esercitando con FormViews di Django.Django CreateView restituisce un errore "deve avere un valore per il campo" ... "prima che questa relazione molti-a-molti possa essere utilizzata."
In questa app, sto creando una vista PostCreate che crea un post sul blog.
Qui sono i miei codici:
models.py
class Post(models.Model):
user = models.ForeignKey(User)
post_title = models.CharField(max_length=200)
post_content = models.CharField(max_length=500)
class Tag(models.Model):
name = models.CharField(max_length=64, unique=True)
posts = models.ManyToManyField(Post)
forms.py
class PostForm(forms.ModelForm):
post_title = forms.CharField(
label=u'Title',
widget=forms.TextInput(attrs={'size':64})
)
post_content = forms.CharField(
label=u'Content',
widget=forms.TextInput(attrs={'size':128})
)
tags = forms.CharField(
label=u'Tags',
required=True,
widget=forms.TextInput(attrs={'size':64})
)
class Meta:
model = Post
exclude = ('user', 'post_date')
views.py
class PostCreate(CreateView):
template_name = 'app_blog/post_save_form.html'
model = Post
form_class = PostForm
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.user = self.request.user
tag_names = form.cleaned_data['tags'].split()
for tag_name in tag_names:
tag, dummy = Tag.objects.get_or_create(name=tag_name)
self.object.tag_set.add(tag)
return super(PostCreate, self).form_valid(form)
Quando ho provare a salvare un post (post-test 1) in un database, mi dà un errore:
necessità di avere un valore per il campo "post" prima di questo molti-a-molti può essere Usato.
Sembra che il problema sia causato dalle righe in views.py in cui ho diviso il campo "tag" e aggiunto i tag al campo tag_set dell'oggetto post. Suppongo che questa logica non dovrebbe essere incluso nel metodo form_valid ... ma non so dove altro questo dovrebbe essere attuata ..
Qualsiasi aiuto sarebbe molto apprezzato :) Grazie
tuo suggerimento risolto l'errore !! Tuttavia, dopo averlo fatto, l'oggetto Tag viene aggiunto per OGNI post per qualche motivo .... Ad esempio, se aggiungo Tag1 a Post # 4, Tag1 viene aggiunto a Post # 1, Post # 2, Post # 3 e Post # 4 .. Idk perché questo sta accadendo ... :( – user2492270
Sì. Il suggerimento aiuta davvero. A proposito, a volte penso che i messaggi di errore siano verdi. Messaggi di errore (confusi) non validi (come questo) devono essere pensati google a chiedere (e anche a cui rispondere). Forse ancora peggio, se l'interrogante non sa di accettare una risposta corretta ;-) – stanleyxu2005
Grazie per avermi risparmiato ore. .... –