[英]One field (ManyToMany) in a Django ModelForm is not saving to database
[英]Django form manytomany field not saving to database
我是 Django 的新手,我正在一個用戶可以提交帖子的網站上工作。 當我在 model 中有許多字段時,Django 表單未保存在數據庫中。 我不知道我是否可以在 Django 中實現這一點,我想將其他用戶名附加到帖子中,這樣當我提交表單時,當我在管理員中檢查帖子時會自動選擇用戶名。 為了清楚起見,我將附上屏幕截圖。
下圖是我的表單,您可以看到“我的帖子”是 image_caption,而“andy”是另一個用戶名,我希望在提交表單時在 manytomany 字段中自動選擇“andy”。
這就是我在提交表單時想要的,然后我在管理員中簽入。 提交表單時,在多對多字段中選擇了另一個用戶名(andy)。 我手動完成了這個
Model:
class Profile(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL,on_delete=models.CASCADE,blank=True,null=True)
profile_pic = models.ImageField(upload_to='ProfilePicture/', default="ProfilePicture/user-img.png", blank=True)
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(settings.AUTH_USER_MODEL, related_name='tagged_users', blank=True)
Forms:
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = (
'image_caption',
'tag_someone',
)
意見:
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())
#User Name Auto-complete In Tag Form
all_users = User.objects.values_list('username', flat=True)
context = {
'form': form,
'formset': formset,
'all_users': all_users,
}
return render(request, 'upload.html', context)
上傳.html:
<form method="POST" enctype="multipart/form-data">
{% csrf_token %}
{{ form }}
{{ formset }}
<button type="submit" class="btn btn-primary btn-sm btn-block w-25">Post</button>
</form>
我能夠通過將小部件更改為:
widget = {
forms.Select(),
}
您可以在此處更改小部件。 小部件負責將輸入輸出到 HTML。 所以你只需要:
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = (
'image_caption',
'tag_someone',
)
widgets = {'tag_someone': forms.TextInput}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.