def fill_articles(self): if Article.objects.count() > 0: return fake = Faker() tags_set = Tags.objects.all() print() for i in range(40): post = Article() post.title = fake.sentence(nb_words=6, variable_nb_words=True, ext_word_list=None) post.text = fake.text(max_nb_chars=3000, ext_word_list=None) post.creationDate = fake.date(pattern="%Y-%m-%d", end_datetime=None) post.departureDate = fake.date(pattern="%Y-%m-%d", end_datetime=None) post.returnDate = fake.date(pattern="%Y-%m-%d", end_datetime=None) post.shortDescription = fake.text(max_nb_chars=100, ext_word_list=None) post.image = random.choice(photos) post.id = i post.location = fake.sentence(nb_words=1, variable_nb_words=True, ext_word_list=None) post.save() # заполениение поля ManyToManyField() должно происходить после сохранения записи в базу (после post.save()) # иначе будет instance is on database "None", value is on database "default" - невозможно связать с несуществующей записью for j in range(3): t = random.choice(tags_set) post.tags.add(t) self.stdout.write('add tag [%s] in article [%d]' % (t, i)) self.stdout.write('add article [%d]' % post.id)
def create_article(request): """ Upload images """ from PIL import Image form = ArticleForm(request.POST, request.FILES) if form.is_valid(): # insert the article into db article = Article(client=request.user, title=form.cleaned_data['title'], body=form.cleaned_data['body'], image=form.cleaned_data['image']) article.save() # getting article topics article_topics = request.POST.get('article-topics', '') article_topics = json.loads(article_topics) # add topics to article for key, value in article_topics.iteritems(): topic_id = key.split('_')[-1] if value: topic = Topic.objects.get(id=topic_id) article.topics.add(topic) article.save() # IMAGE tasks # get article after inserting it article = Article.objects.latest('pk') # image article, extension and path image = article.image ext = image.name.split('.')[-1].lower() path = image.path # resize image image = Image.open(image) image = image.resize((800, 500)) image.save('blog/static/blog/img/articles/{}.{}'.format( article.id, ext)) article.image = 'blog/img/articles/{}.{}'.format(article.id, ext) article.save() # delete old image if os.path.exists(path): os.remove(path) return HttpResponseRedirect(reverse('blog:index'))
def write(request): if request.method == 'GET': aform = ArticleForm() return render(request, 'write.html', context={'aform': aform}) else: aform = ArticleForm(request.POST) print(aform) if aform.is_valid(): data = aform.cleaned_data article = Article() article.title = data.get('title') article.desc = data.get('desc') article.content = data.get('content') article.image = data.get('image') article.user = data.get('user') #1对多,可直接赋值 article.save() article.tags.set(data.get('tags')) #多对多,必须文章生成后有了文章id才能添加标签 return redirect(reverse('blog:index')) else: print('校验失败') return HttpResponse('TEST')