2009-08-15 7 views
1

私は検索して乾いた。私も django本(Forcier、Bissex、Chun)を所有しており、彼らはこれを行う方法を説明していません これ。要するに、私はここで ManyToManyを使ってmodels.pyし、シェルスクリプトを使ってデータをプログレッシブに追加する

from django.db import models 
from django.contrib import admin 

class Client(models.Model): 
    client  = models.CharField(max_length=256, primary_key=True) 
    access  = models.DateField() 
    description = models.TextField() 
    host   = models.CharField(max_length=256) 
    lineEnd  = models.CharField(max_length=256) 
    options  = models.TextField() 
    owner   = models.CharField(max_length=100) 
    root   = models.CharField(max_length=256) 
    submitOptions = models.CharField(max_length=256) 
    update  = models.DateField() 
    def __unicode__(self): 
    return str(self.client) 
admin.site.register(Client) 


class Change(models.Model): 
    """This simply expands out 'p4 describe' """ 
    change  = models.IntegerField(primary_key=True) 
    client  = models.ManyToManyField(Client) 
    desc   = models.TextField() 
    status  = models.CharField(max_length=128) 
    def __unicode__(self): 
    return str(self.change) 
admin.site.register(Change) 

は私が働く持っているものですが、私は追加する方法がわからない... progmatically ManyToMayモデルへのpythonシェルスクリプトを介してデータを追加する方法を見つけ出すことはできません ManyToMany。私はどのようにプログレッシブにそれを呼び出すのか分からないようです。 私はSQLの行が存在することを知っています。私の方法の誤差がある場合

--- --- massImport.py

# Assume the client "clientspec" exists. I know how to create that if 
neeeded. 
changes = [ { 'change': 123, 'desc': "foobar", status': "foobar", 
client': "clientspec", }] 
for item in changes: 
    entry = Change( 
      change = item['change'], 
      desc = item['desc'], 
      status = item['status'], 
      # client = Client.objects.filter(client=item['client']) 
      ) 
    entry.save() 

誰もが私を見ることができます。私は本当にそれを感謝するだろう 。 ありがとうございます!あなたは.get(client=item['client'])

答えて

0

.filterあなたが必要なときに、リストを返しますが..

# Assume the client "clientspec" exists. I know how to create that if 
neeeded. 
changes = [ { 'change': 123, 'desc': "foobar", status': "foobar", 
client': "clientspec", }] 
for item in changes: 
    entry = Change() 
    entry.change = item['change'] 
    entry.desc = item['desc'] 
    entry.status = item['status'] 
    entry.time = datetime.datetime.fromtimestamp(float(item['time'])) 
    entry.client.add(Client.objects.get(client=item['client'])) 
    entry.save() 

単一のオブジェクトです..だから私はティアゴに小道具を与えます

+0

いや! TypeError: 'client'はこの関数の無効なキーワード引数です Bummer - あなたはそれを持っていると思っていました.. – rh0dium

2

ティアゴは非常に近かったが判明を使用する必要がありますので

+0

+1 'changes = [{'change':123、 'desc':" foobar "、status '、 "foobar"、 "foobar"、クライアント': "clientspec"、}] '通常は' changes =((123、 'foobar'、 'foobar'、 'clientspec')、...) '非常に悪いです。 – suhailvs

0

私はコードを試してみましたが、私はエラー

ValueError: "<Change: 123 -- foobar>" needs to have a value for field "change" before this many-to-many relationship can be used

を得ました

多対多(entry.client.addは)あなたが使用できるようにすなわちentry.save()

クライアントの多くがあるかもしれない唯一のフィールドを保存した後に使用することができます。

changes = [{'change': 123, 'desc': "foobar", 'status': "foobar", 
'client': ("client1","client2"),},{......] 
for item in changes: 
    entry = Change( 
     change = item['change'], 
     desc = item['desc'], 
     status = item['status'],) 
    entry.save() 
    for c in item['client']: 
     entry.client.add(Client.objects.get(client=c)) 
関連する問題