アーティストIDとそのすべての部分が検索されたときに、基本的にはArtist
とArtistPiece
Djangoの外部キーが1対多の関係では機能しない
#models.py
class Artist(models.Model):
name = models.CharField(max_length=100)
artist = models.CharField(max_length=150)
created_by = models.ForeignKey(User)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class ArtistPiece(models.Model):
artist = models.ForeignKey(Artist, on_delete = models.CASCADE)
piece_name = models.CharField(max_length=50)
details = models.CharField(max_length=100)
#views.py
from .models import Artist, ArtistPiece
class EditArtistViewSet(viewsets.ViewSet):
def edit(self,request,artist_id):
artist = Artist.objects.select_related().get(pk=artist_id)
data = model_to_dict(artist)
return render(
request, 'ArtistInfo/edit.html', {
'editing': 'true',
'edit_data': json.dumps(data),
})
def submit_edit(self,request):
return render(request, 'ArtistInfo/edit.html')
上記の作品が、それは主キーにもかかわらず、ArtistPieceモデルからのデータのいずれかを選択しません。その後this postを読んだら、select_related
を使って、私はアーティストを見上げるのではなく、foreign_keyでArtistPieceを探し、select_relatedを使ってアーティストに関する情報を見つけなければならないと気づきました。
私は、試してみました次のエラーget()
になったこの
def edit(self, request, artist_id):
artist = ArtistPiece.objects.get()
data = model_to_dict(artist)
は、複数のArtistPieceを返された - それは5を返して!検索すると、私はthis postが見つかりましたが、私は取得するよりもむしろフィルタを使用する必要があると述べています。私はそれを試してみました
def edit(self, request, artist_id):
artist = ArtistPiece.objects.select_related('artist').filter(artist=artist_id)
data = model_to_dict(artist)
これは、次のエラー'QuerySet' object has no attribute '_meta'
を与えました。私はこのエラーを探してみたところ、基本的にgetを使うことを示唆しているthisが見つかりました。
要約すると、私はただアーティストとその作品を選択したいと思いますが、どのようにして分かりません。
編集 - 私は、いくつかのことを試してみましたが、いくつかの進歩を遂げたが、それはまだちょうど私が自分のIDでアーティストを検索しますクエリを記述しようとして明確にすることが正しく
を働いていません結果はアーティストの情報とアーティストの作品になります。 artist_idまたはArtistPiece
モデルに基づいてArtist
モデルをクエリして取得できますが、Artist
とそのアーティストに関連付けられたすべてのArtistPiece
エントリの両方を返すクエリは1つではありません。
related_name='pieces'
を私のモデルに追加すると、私はを試しましたが、それでも上記のno属性を与えました。エラーです。 data = model_to_dict(artist)
をdata = [model_to_dict(a) for a in artist]
に変更しましたが、データはアーティストだけで、ArtistPiece
モデルのデータはありませんでした。
ArtistPiece
モデルを照会しようとした
Artist
モデルを照会する
:artist = ArtistPiece.objects.select_related('artist').filter(artist=artist_id)
が、その後、唯一のアーティストの作品は、返却されたとArtist
モデルからの情報なし。
を行うことができ、リストが必要な場合、私は単数形であることをArtistPiece' 'の名前を変更しました。その名前は、各インスタンスがそれらの* 1 *を表すという事実を反映する必要があります。 – bignose