Tôi đang thực hành với FormViews của Django.Django CreateView cung cấp cho một lỗi "cần phải có một giá trị cho trường" ... "trước khi mối quan hệ nhiều-nhiều này có thể được sử dụng."
Trong ứng dụng này, tôi đang tạo chế độ xem PostCreate tạo bài đăng trên blog.
Dưới đây là mã của tôi:
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)
Khi tôi cố gắng tiết kiệm một bài (Test Post 1) vào một cơ sở dữ liệu, nó mang lại cho tôi một lỗi:
nhu cầu phải có một giá trị cho trường "bài" trước khi điều này nhiều-nhiều mối quan hệ có thể đã sử dụng.
Có vẻ như vấn đề là do các dòng trong views.py nơi tôi chia trường "thẻ" và thêm các thẻ vào trường tag_set của đối tượng bài đăng. Tôi cho rằng logic này không nên được bao gồm trong phương pháp form_valid ... nhưng tôi không biết nơi nào khác này nên được thực hiện ..
Bất kỳ trợ giúp sẽ được đánh giá cao :) Cảm ơn rất nhiều
đề nghị bạn giải quyết các lỗi !! Tuy nhiên, sau khi thực hiện việc đó, đối tượng Thẻ được thêm vào cho mỗi bài đăng vì một số lý do .... Ví dụ: nếu tôi thêm Tag1 vào Bài đăng # 4, Tag1 sẽ được thêm vào Bài đăng # 1, Bài đăng # 2, Bài đăng # 3 và Đăng # 4 .. Idk lý do tại sao điều này xảy ra ... :( – user2492270
Vâng, gợi ý thực sự hữu ích. Bằng cách này, đôi khi tôi nghĩ rằng thông báo lỗi tốt là màu xanh lá cây. Các thông báo lỗi (khó hiểu) (như thế này) cần phải suy nghĩ google để hỏi (và cũng có thể được trả lời) Có lẽ thậm chí tệ hơn, nếu người hỏi không biết để chấp nhận một câu trả lời đúng ;-) – stanleyxu2005
Cảm ơn bạn đã tiết kiệm cho tôi giờ. .... –