1
我試圖創建一個簡單的CSV導入窗體,導入到我的模型GroupMembers。 GroupMembers模型具有鏈接到我的Groups模型的多對多字段。這個想法是可以上傳特定組的CSV會員文件;您可以從CSV上傳的同一頁面的下拉菜單中選擇一個組。成員可以是多個組的成員,所以如果成員已經存在,它應該只添加新的組關係。CSV導入到模型與多對多字段
我的代碼部分工作 - 它增加了groupmembers - 但我遇到了與羣組的多對多鏈接問題。這是到目前爲止我的代碼
models.py(集團)
class Group (models.Model):
initials = models.CharField(max_length = 20)
initials_lower = models.CharField(max_length = 20)
full_name = models.CharField('Full name', max_length = 100)
models.py(groupmember) - 這是那裏的CSV增加
from django.db import models
from datetime import datetime
class GroupMember (models.Model):
name = models.CharField('Name', max_length = 30, unique = True)
pub_date = models.DateTimeField('Date published', auto_now_add = True)
groups = models.ManyToManyField('groups.Group', blank = True)
def __unicode__(self):
return self.name
forms.py
from django import forms
import csv
from myproject.groupmembers.models import GroupMember
from myproject.groups.models import Group
class GroupImportForm (forms.Form):
csv_file = forms.FileField()
group_name = forms.ModelChoiceField(queryset=Group.objects.all())
def save(self):
records = csv.reader(self.cleaned_data["csv_file"])
for line in records:
input_data = GroupMember()
input_data.handle = line[0]
input_data.groups.create(initials=self.cleaned_data["group_name"]) <-- this is where the problem is
input_data.save()
views.py(部分)
def batch_add (request):
if request.method == 'POST':
form = GroupImportForm(request.POST, request.FILES)
if form.is_valid():
form.save()
else:
form = GroupImportForm()
return render_to_response(
'members/batch_add.html',
{
'form': form,
},
context_instance=RequestContext(request)
)
上傳時出現的錯誤是'initials_lower'不存在,這意味着它試圖創建一個新的組記錄,我不希望它做。我只是希望它使用從select中選擇的預先存在的組,並將其添加到組中的多對多字段中。
希望是有道理的,任何幫助讚賞
感謝您的答覆,我在進步。它現在添加了多對多的關係,但是它正在讀取該組,而不是從選擇中獲取,即使管理屏幕中的2是相同的。由於名稱目前是唯一的,我應該使用get_or_create作爲實際的組成員,因爲它們可能是多個組的成員? – 2012-02-25 18:55:40