簡體   English   中英

Django發布表單形式的Manytomany字段

[英]Django post manytomany field with form

我試圖選擇poi(興趣點)來制作loi(興趣線),但在很多領域遇到了兩個問題:

1.為什么我不能發布多個選擇的選項。

2.如何使用我想要的名稱(例如POI_title) 原始名稱/圖像更改選項中的名稱

Model.py

class POI(models.Model):
    user = models.ForeignKey(User,on_delete = models.CASCADE)
    poi_id = models.AutoField(primary_key=True)
    POI_title = models.CharField(max_length=10)
    def __unicode__(self):
        return "{}({})".format(self.POI_date, self.user)

class LOI(models.Model):
    user = models.ForeignKey(User,on_delete = models.CASCADE)
    poi = models.ManyToManyField(POI)
    LOI_title = models.CharField(max_length=10)
    loi_id = models.AutoField(primary_key=True)

Form.py

 class LOIForm(forms.ModelForm):
 class Meta:
    model = models.LOI
    fields = ['poi','LOI_title']
    def __init__(self, user, *args, **kwargs):
        super(LOIForm,self).__init__(*args, **kwargs)
        self.fields['poi'].widget = forms.widgets.CheckboxSelectMultiple()
        self.fields['LOI_title'].label= 'title'

Views.py

 if request.method == 'POST':
    request.POST.get("name", request.user.username)
    loi_form = forms.LOIForm(request.POST)
    if loi_form.is_valid():
        loi_form = loi_form.save(commit=False)
        loi_form.user = request.user
        loi_form.save()
        return HttpResponseRedirect('/make_LOI')

模板

<table>
   {% for p in loi_form.poi %}
       <tr>{{p}}</tr>
   {% endfor%}
</table>
  1. 您正在form.save()中使用commit=False 在這種情況下,在loi_form.save()您將需要添加loi_form.save_m2m()來保存多對多字段。

  2. __unicode__函數中,您將返回self.POI_date, self.user ,其結果顯示為圖像。 而是使用:

     def __str__(self): return self.POI_title 

__unicode__在python2中使用,僅使用__str__就足夠了。 刪除__unicode__函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM