私のモデルGroupMembersにインポートする単純なCSVインポートフォームを作成しようとしています。 GroupMembersモデルには、My Groupsモデルにリンクする多対多フィールドがあります。特定のグループのCSVメンバーシップファイルをアップロードすることができます。 CSVアップロードと同じページのドロップダウンからグループを選択します。メンバーは複数のグループのメンバーになることができます。メンバーがすでに存在する場合は、新しいグループ関係を追加するだけです。多対多のフィールドを持つモデルにCSVをインポート
私のコードは部分的に動いています - それはグループメンバーを追加しますが、私はグループへの多対多のリンクに問題があります。ここに私のコードは、これまでのところです
(グループ)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)は
models.py - 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()
views30(部分)
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」が存在しないというエラーが表示されています。これは、新しいグループレコードを作成しようとしていることを意味します。私は単純に選択から選択された既存のグループを使用し、それをグループの多対多フィールドに追加するだけです。返信用
input_data.groups.get_or_create(initials=self.cleaned_data["group_name"])
おかげで、私は進歩している:それはまだ存在しない場合にのみ意味があります
希望は、任意のヘルプは、オブジェクトを作成し使用get_or_create –