我正在嘗試創建一個簡單的收件箱應用程序,允許用戶使用UserModel發送每個其他消息。Django如何在formset隱藏字段中初始化queryset中所有對象的對象ID?
如何在formset的隱藏字段中的查詢集中填充所有對象的id?因爲當我嘗試
File "C:\mysite\pet\views.py" in message
913. initial.update({'hidden_field': messages.id})
異常類型:AttributeError的在/消息/ 異常值: '功能' 對象沒有屬性 'ID'
class Message(models.Model):
user = models.ForeignKey(User, related_name='sender')
recipient = models.ForeignKey(User, related_name='recipient')
created = models.DateTimeField(auto_now_add=True)
body = models.CharField(max_length=1000)
read = models.BooleanField(default=False)
trash = models.BooleanField(default=False)
sentmessage = models.BooleanField(default=False)
thread = models.ForeignKey(Thread,blank=True,null=True)
draft = models.BooleanField(default=False)
def __unicode__(self):
return self.body
視圖
@login_required
def message(request):
person = Person.objects.get(user=request.user)
messages = Message.objects.filter(recipient=request.user.id).order_by("-created").values
initial = {}
initial.update({'hidden_field': messages.id})
form = formset_factory(CheckBoxForm)
formset = form(initial=initial)
return render(request,'messages.html',{'messages':messages,'form':form,'person':person})
形式
class CheckBoxForm(forms.Form):
checkbox = forms.BooleanField(required=False)
hidden_field = forms.CharField(widget=forms.HiddenInput())
模板
{% for m in messages %}
{{m.body}}
{% endfor %}
@新代碼
@login_required
def message(request):
messages = Message.objects.filter(recipient=request.user).order_by("-created")
form = CheckBoxForm()
if request.method =='POST':
form = ReplyForm(request.POST)
if form.is_valid():
id = request.POST.get('hidden_field', False)
Message.objects.filter(pk=id).delete()
return render(request,'messages.html', {'messages':messages,'form':form,'person':person})
您只能訪問模型類實例中的標識。我假設你將複選框放在消息旁邊,儘管它不在你的代碼中。如果是這種情況,爲什麼不把模板中的? – JonLeslieHarding
@lntheNoob我發佈了上面的一些新代碼,我做到了。例如,如果我有5複選框。並嘗試通過發佈刪除它。它只會刪除一個 – JackRoster
@IntheNoob,如果他們的許多消息,然後他們的許多複選框。你將如何創建一個可以刪除對象的函數? – JackRoster