2

コードの何が問題になっていますか?

class Group(ImageModel):
     title = models.CharField(verbose_name = "Title", max_length=7)
     photos = models.ManyToManyField('Photo', related_name='+', 
                                             verbose_name=_('Photo'),
                                             null=True, blank=True)

    .....


     pid = Photo.objects.get(image = str_path)

     gid= Group.objects.get(id = self.id)       

     self.save_photos(gid, pid)

    ....


    def save_photos(self, gid, pid):
       group_photo = GroupPhotos(groupupload=gid.id,
                                        photo=pid.id
                                        )
       group_photo.save()

私のGroupPhotosモデルは次のとおりです。

class GroupPhotos(models.Model):
    groupupload = models.ForeignKey('Group')
    photo = models.ForeignKey('Photo')
    class Meta:
        db_table = u'group_photos'

管理パネルから保存しようとすると、次のような値エラーが表示されます。

Cannot assign "38": "GroupPhotos.groupupload" must be a "Group" instance.

) 定義で動作しgroup_photo = GroupPhotos(groupupload=gid, photo=pidていますが、GroupPhotos テーブル (group_photos) に変更はありません。これを印刷するprint pid.id,' >>> ',gid.idと、真の関係が得られます...

アップデート:

私は朝から働いていますが、進歩はありません...これも試しましたが、何も変わりませんでした:

pid = Photo.objects.get(image = str_path)

ger = Group.objects.get(id = self.id)
        ger.title = self.title       
        ger.save()

        ger.photos.add(pid)
4

2 に答える 2

4

エラーは次のとおりです。

group_photo = GroupPhotos(groupupload=gid.id, photo=pid.id)

groupuploadandへの引数は、それぞれ andphotoのインスタンスでなければなりません。次のことを試してください。GroupPhoto

group_photo = GroupPhotos(groupupload=gid, photo=pid)

つまり、オブジェクトを作成するときは、整数ではなく、期待される型の引数を渡す必要があります (これは、目的のオブジェクトの主キー キーである可能性がありますが、そうでない可能性もあります。そのため、正しいタイプ)。

于 2012-07-06T07:36:09.997 に答える
0

manytomanyfield にthroughオプションを追加することで問題を解決しました:

photos = models.ManyToManyField('Photo', related_name='+', 
                                     verbose_name=_('Photo'),
                                     null=True, blank=True, through=GroupPhotos)

ここからManyToManyField.throughに関するいくつかの情報:

Django は、多対多の関係を管理するためのテーブルを自動的に生成します。ただし、中間テーブルを手動で指定する場合は、 through オプションを使用して、使用する中間テーブルを表す Django モデルを指定できます。

このオプションの最も一般的な用途は、余分なデータを多対多の関係に関連付ける場合です。

于 2012-07-06T13:57:25.670 に答える