2015-12-03 39 views
0

我有一個表單,提交後我想將它保存到數據庫。我爲此創建了一個模型。如果我保存簡單的字段,CharField等等,這一切都很好。 但模型有多對多的fileld,並且可以添加指定主鍵(即1或2)的tis字段。 但是如何插入數據,這已經不在db中了?Django:如何使用ManytomayField以表格形式保存對象

形式views.py:

def vk_get_wallposts(request): 
sys_project_name = '' 
internet_source_type = '' # 
success = False 
number_to_get = '' 
group_url = '' 
forum_urls = '' 
date_saved = datetime(2015, 9, 26) 
filter_posts = '' 
print('vk_get_wallposts form') 

if request.method == 'POST': 
    vkwallpostget_form = VkwallpostgetForm(request.POST) 
    if vkwallpostget_form.is_valid(): 
     print('vk_get_wallposts form is_valid') 
     success = True 
     sys_project_name = vkwallpostget_form.cleaned_data[ 
      'sys_project_name'] 
     internet_source_type = vkwallpostget_form.cleaned_data[ 
      'internet_source_type'] 
     number_to_get = vkwallpostget_form.cleaned_data['number_to_get'] 
     # domain = vkwallpostget_form.cleaned_data['domain'] 
     group_url = vkwallpostget_form.cleaned_data['group_url'] 
     forum_urls = vkwallpostget_form.cleaned_data['forum_urls'] 
     filter_posts = vkwallpostget_form.cleaned_data['filter_posts'] 

     if 'Vk.com' in internet_source_type: 
      get_wallposts_by_owner_id(group_url, sys_project_name, date_saved, number_to_get, 
             filter_posts=filter_posts) # 81099158 @staticmethod из класса VkuserListView 

     pr = Userproject.objects.create(name=sys_project_name, description='test description', user=request.user, date_updated=date_saved, 
            date_until=date_saved) 
     pr.vk_groups.add(1,2) 
     #pr.vk_groups.add('https://vk.com/southitpark', 'https://vk.com/graphgrail') - this is dont work 

else: 
    vkwallpostget_form = VkwallpostgetForm() 
    success = False 

ctx = {'vkwallpostget_form': vkwallpostget_form, 'sys_project_name': sys_project_name, 
     'internet_source_type': internet_source_type, 'forum_urls': forum_urls, 
     'group_url': group_url, 'number_to_get': number_to_get, 'filter_posts': filter_posts, 'success': success} 
return render_to_response('vk_get_wallposts.html', ctx, context_instance=RequestContext(request)) 

所以線的工作原理: PR = Userproject.objects.create(名稱= sys_project_name介紹= '測試描述',用戶= request.user,日期date_updated = date_saved, date_until = date_saved) pr.vk_groups.add(1,2)

但我需要動態數據插入到多到許多領域中,這一數據是字符串的列表,因此 pr.vk_groups。添加('https://vk.com/south「」 https://vk.com/graph「) - 這是不工作

+0

保存一個如果是M2M領域,你需要獲得或創建對象,然後添加它們。 – belek

回答

1

我猜,你的模型應該是這樣的:

class VKGroup(Model): 
    vk_url = ManyToManyField(VKURL, ...) 
class VKURL(Model): 
    url = CharField/or URLField 

然後,如果你使用一個視圖(如mentionned),你只需做如:

url1 = VKURL(url="https://vk.com/south") 
url1.save() 
url2 = VKURL(url="https://vk.com/graph") 
url2.save() 
VKGroup = VKgroup(...) 
VKGroup.add(url1,url2) 

就是這樣!

注意:如果處理表單see this,則在處理表單數據時有一個特殊的Form.save_m2m()方法。我個人儘量避免這種情況,並直接在視圖中處理。

+0

這有效,但我澄清了一些錯誤: url1 = Vkgroupstomonitor(vk_group_name =「https://vk.com/south3」) url1.save() url2 = Vkgroupstomonitor(vk_group_name =「https://vk.com/graph3" ) url2.save() 項目= Userproject(名稱= sys_project_name介紹= '測試描述',用戶= request.user,日期date_updated = date_saved, date_until = date_saved) project.save() 項目。 vk_groups.add(url1,url2) 所以沒有VKGroup.add(url1,url2)但是VKGroup.fieldname.add(url1,url2)。喜歡用for重寫 –

0

有了這個代碼,我是能夠解決:

 url1 = Vkgroupstomonitor(vk_group_name="https://vk.com/south3") 
     url1.save() 
     url2 = Vkgroupstomonitor(vk_group_name="https://vk.com/graph3") 
     url2.save() 
     project = Userproject(name=sys_project_name, description='test description', user=request.user, date_updated=date_saved, 
            date_until=date_saved) 
     project.save() 
     project.vk_groups.add(url1,url2) 

此外,我更喜歡與循環改寫這個,沒有一個

相關問題