Reputation: 1111
I have a form, after submitting i want to save it to database. I have created a model for this. All good if I save simple fields, CharField and so on. But model have many-to-many fileld and can add tis fields specifying primary key, i.e. 1 or 2. But how to insert data, that is not in db already?
form in 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))
So lines works: 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)
But I need dynamically insert data to many-to-many field, this data is list of strings, so pr.vk_groups.add('https://vk.com/south', 'https://vk.com/graph') - this is dont work
Upvotes: 0
Views: 56
Reputation: 1111
With this code i was able to solve:
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)
Also I prefer to rewrite this with for cycle, without saving one by one
Upvotes: 0
Reputation: 1348
I'm guessing that your model should be something like:
class VKGroup(Model):
vk_url = ManyToManyField(VKURL, ...)
class VKURL(Model):
url = CharField / or URLField
Then, if you use a view (as mentionned), you simply do like:
url1 = VKURL(url="https://vk.com/south")
url1.save()
url2 = VKURL(url="https://vk.com/graph")
url2.save()
VKGroup = VKgroup(...)
VKGroup.add(url1,url2)
That's it!
NB. If you deal with a Form, see this, there is a special Form.save_m2m() method when handling form data. Personally I try to avoid this and deal directly in the view.
Upvotes: 1