【发布时间】:2020-06-09 20:33:58
【问题描述】:
我正在创建一个网站,用户可以在其中上传帖子并标记其他用户,就像 facebook 一样。我已经成功实现了一个 postform,并且还在模型中的 manytomany 字段中添加了一个标签字段。我对这个特定主题没有任何想法。那么我如何将用户标记到帖子中,当提交表单时,当帖子保存在管理员中时,标记的用户将被自动选择,这样当我在管理员中检查帖子时,我将能够看到标记的用户被选中在多对多领域。我有一个表单字段,在自动完成提交表单之前,将输入您要标记的用户名。
模型.py:
class Post(models.Model):
poster_profile = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE,blank=True,null=True)
image_caption = models.TextField(blank=True, null=True)
tag_someone = models.ManyToManyField(User, related_name='tagged_users', blank=True)
Forms.py
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = (
'image_caption',
'tag_someone',
)
Views.py:
@login_required
def upload_view(request):
ImageFormset = modelformset_factory(File, fields=('files',), extra=20)
if request.method == "POST":
form = PostForm(request.POST)
formset = ImageFormset(request.POST, request.FILES)
if form.is_valid() and formset.is_valid():
post = form.save(commit=False)
post.poster_profile = request.user
post.save()
form.save_m2m()
for f in formset:
try:
photo = File(post=post, files=f.cleaned_data['files'])
photo.save()
except Exception as e:
break
return redirect('/')
else:
form = PostForm()
formset = ImageFormset(queryset=File.objects.none())
context = {
'form': form,
'formset': formset,
}
return render(request, 'upload.html', context)
上传.html
<form method="POST" enctype="multipart/form-data">
{% csrf_token %}
<input type="file">
<div class="ui-widget">
<input type="text" name="tag_someone" class="form-control autocomplete" maxlength="50"id="id_tag_someone" placeholder="Enter username">
</div>
<button type="submit" class="btn btn-primary btn-sm">Post</button>
</form>
【问题讨论】: