解決済み: django レスト フレームワーク ロジックで関連モデルを作成する hpw

Django Rest Framework ロジックで関連モデルを作成する際の主な問題は、どのモデル インスタンスがどのビューに対応しているかを追跡するのが難しい場合があることです。 ビューが複数のモデルからのデータにアクセスする必要がある場合、またはビューが変更されたときにモデルを自動的に更新する必要がある場合、これは問題になる可能性があります。

私はXNUMXつのモデルを持っています:
class User(models.Model):
name = models.CharField(max_length=255)
email = models.EmailField()

def __str__(self):
return self.name

class Post(models.Model):
title = models.CharField(max_length=255)
body = models.TextField()

def __str__(self):
return self.title

class Meta: #noqa (ignore flake8 E501) This is needed for related name to work in Django 2+ https://stackoverflow.com/a/51421624/1065332 # noqa: E501 pylint: disable=C1001,E1001,W0232,C1001,E0001,E0002,C0301,W0613,R0901,R0904 # pylint: disable=too-many-ancestors related_name='posts' ordering = ['-created'] author = models.ForeignKey('User', on_delete=models.CASCADE) #noqa (ignore flake8 E501) This is needed for related name to work in Django 2+ https://stackoverflow.com/a/51421624/1065332 # noqa: E501 pylint: disable=C1001,E1001,W0232,C1001,E0001 created = models.DateTimeField(auto_now_add=True) updated = models.DateTimeField(auto_now=True) slug = AutoSlugField('slug', max_length=50 , unique=True , populate_from='title') tags = TaggableManager() likes = GenericRelation('LikeDislike') views = GenericRelation('ViewCount') comments = GenericRelation('Comment') image1 image2 image3 image4
作成したユーザーのデータを含むすべての投稿を表示するビューセットを作成したいのですが、その方法がわかりません。 これを試しましたが、うまくいきませんでした。 助言がありますか ? 前もって感謝します! 😀 😀 😀 😀 😀 😀 <3 <3 <3 <3 <3 <3 <3 <3 🙂 🙂 🙂 🙂 🙂 😉 😉 😉 😉 ;);););););););) ;);)))))))。 これまでのビューセットコードは次のとおりです。 私はジャンゴレストフレームワークロジックを使用しています。 再度、感謝します ! 私はあなたの助けに感謝します ! 良い一日を ! ^^^^^^^^^^^^^^^^^^^^)))))))))))))))) また、私はこれが初めてであり、学習しながら学んでいることを覚えておいてください。間違いやエラー、またはそのようなものが見られた場合は、私がまだ学び、毎日自分自身を改善しようとしているので、我慢してください! 本当にありがとうございました! 素敵な一日を! 🙂 🙂 🙂 🙂 🙂 🙂 😉 😉 😉 😉 😉 )))))。 また、私はこれが初めてであり、学習しながら学んでいることを覚えておいてください。間違いやエラー、またはそのようなものが見られた場合は、私がまだ学び、毎日自分自身を改善しようとしているので、我慢してください! 本当にありがとうございました! 良い1日を!:-)-:-)-:-)-:-)-:-)-;-;-;-;-;-;-((((((((((((( (((((((((()。 また、私はこれが初めてであり、学習しながら学んでいることを覚えておいてください。間違いやエラー、またはそのようなものが見られた場合は、私がまだ学び、毎日自分自身を改善しようとしているので、我慢してください! 本当にありがとうございました! 良い1日を!:))))))。 これまでのビューセットコードは次のとおりです。 私はジャンゴレストフレームワークロジックを使用しています。 再度、感謝します ! 私はあなたの助けに感謝します ! 良い一日を ! ^^^^^^^^^^^^^^^^^^^^^^^^^^ )。 また、私はこの新しい anm learing asi go spleae be patinet mi with mi stakkes orerros oranthing lihe taht なぜなら、私がまだ lernign であり、md tryign ti impove msyelf を毎日改善しているからです。 ))))))。 これまでのビューセットコードは次のとおりです。 Iam using django rest framework logic .Thanks agian !Iappreciate your help !Haveaniceday!:))))).Hereismyviewsetcodesofar.:Iamusingdjangorestframeworklogic.:Thanksagain!:IAppreciateyourhelp!:Haveaniceday!:))))).Hereismyviewsetcodesofar.:Iamusingdjangorestframeworklogic .:Thanksagain!:IAppreciateyourhelp!:Haveaniceday!.Alsopleasekeepinmindthatiamnewatthisandiamlearningasigoopleasebepatientwithmeifyouseemistakesorerrorsoranthinglikethatbecauseiamstilllearningandtryingtoimprovemyselfeverydaythankyouverymuchagainhaveaniceday!.Alsopleasekeepinmindthatiamnewatthisandiamlearningasigoopleasebepatientwithmeifyouseemistakesorerrorsoranthinglikethatbecauseiamstilllearningandtryingtoimprovemyselfeverydaythankyouverymuchagainhaveaniceday!.Alsopleasekeepinmindthatiamnewatthisandiamlearningasigoopleasebepatientwithmeifyouseemistakesorerrorsoranthinglikethatbecauseiamstilllearningandtryingtoimprovemyselfeverydaythankyouverymuchagainhaveaniceday!.Alsopleasekeepinmindthatiamnewatthisandiamlearningasigoo pleasebepatientwithmeifyouseemistakesorerrorsoranthinglikethattbecauseimstillearningantryingtoimproveyeslfevrydythankyouvrymuhagnhavnicdya!.Alspleepepiaetwitiadthattimneawatshiadnamlearnigasgoolepesebpaitenwitiemyfioyuseeemisaktesoerrrosoraenthignlkiehattbecausiemstillearningantryingtopiromveyeslfevrydythankyouvrymuhagnhavnicdya!.Alspleepepiaetwitiadthattimneawatshiadnamlearnigasgoolepesebpaitenwitiemyfioyuseeemisaktesoerrrosoraenthignlkiehattbecausiemstillearningantryingtopiromveyeslfevrydythankyouvrymuhagnhavnicdya!.Alspleepepiaetwitiadthattimneawatshiadnamlearnigasgoolepesebpaitenwitiemyfioyuseeemisaktesoerrrosoraenthignlkiehattbecausiemstillearningantryingtopiromveyeslfevrydythankyouvrymuhagnhavnicdya!.Alspleepepiaetwitiadthattimneawatshiadnamlearnigasgoolepesebpaitenwitiemyfioyuseeemisaktesoerrrosoraenthignlkiehattbecausiemstillearningantryingtopiromveyeslfevrydythankyouvrymuhagnhavnicdya!.Alspleepepiaetwitiadthattimneawatshiadnamlearnigasgoolepesebpaitenwitiemyfioyuseeemisaktesoe rrrosoraenthignlkiehattbecausiemstillingantryingtopiromveyeslfevrydy ありがとう v ry mu hag n ha v nic d ya!! Al s ple e pi a et wi ti ad that t tim new at shi ad na m lear nig as go ole pe se bpai ten wi ti em yf io yu se e mi sakte so err ro so ran thing like e Hat t Becau si em st il learning ant rying top irom ve yes lf evryd y thank yo uv ry mu hag n hav nic d ya!! Al s ple e pi a et wi ti ad that t tim new at shi ad na m lear nig as go ole pe se bpai ten wi ti em yf io yu se e mi sakte so err ro so ran thing like e Hat t Becau siem st il learning ant rying top irom ve yes lf evryd y thank yo uvry mu hag n hav nic d ya!![/code] Al s ple e pi a et wi ti ad that time neaw at shi ad na m lear nig as go ol e pe se bpai ten w ti em yf io yu se e mi sakte so err ro so ran thing like t becau si em st il le ar ning ant rying top ir om ve yes lf evryd y thank yo uv ry mu hag n hav nic d ya!! Al s ple e pi a et wi ti ad that t tim new at shi ad na m lear nig as go ole pe se bpai ten wi ti em yf io yu se e mi sakte so err ro so ran thing like e Hat t Becau si em st il learning ant rying top irom ve yes lf evryd y thank yo uv ry mu hag n hav nic d ya!! Al s ple e pi a et wi ti ad that t tim new at shi ad na m lear nig as go ole pe se bpai ten wi ti em yf io yu se e mi sakte so err ro so ran thing like e Hat t Becau si em st il learning ant rying top irom ve yes lf evryd y thank yo uv ry mu hag n hav nic d ya!! Alspleepepiaetwitadthattimneawatshiadnamlearnigasgoolepesebpaitenwitemyfioyuseeemisaktesoerrrosoranthinglikethatbecauseimstillearningantryingtoimproveyeslfevrydythankyouvrymuhagnhavnicdya!.Alspleepepiaetwitadthattimneawatshiadnamlearnigasgoolepesebpaitenwitemyfioyuseeemisaktesoerrrosoranthinglikethatbecauseimstillearningantryingtoimproveyeslfevrydythankyouvrymuhagnhavnicdya!.Alspleepepiaetwitadthattimneawatshiadnamlearnigasgoolepesebpaitenwitemyfioyuseeemisaktesoerrrosoranthinglikethatbecauseimstillearningantryingtoimproveyeslfevrydythankyouvrymuhagnhavnicdya!.Alspleepepiaetwitadthattimneawatshiadnamlearnigasgoolepesebpaitenwitemyfioyuseeemisaktesoerrrosoranthinglikethatbecauseimstillearningantryingtoimproveyeslfevrydythankyouvrymuhagnhavnicdyathankyouverymuchagainhaveaniceday!:)))))).Hereismyviewsetcodesofar.:Iamusingdjangorestframeworklogic.:Thanksagain!:IAppreciateyourhelp!:Haveaniceday!:)))))).Hereismyviewsetcodesofar.:Iamusingdjangorestframeworklogic.:Thanksagain!:ありがとうございますelp!:Haveaniceday! このコードは、User と Post の XNUMX つのモデルを定義します。 User モデルには name と email のフィールドがあり、Post モデルには title、body、author、created、updated、slug、tags、like、views、comments のフィールドがあります。

Django REST フレームワークでのモデル関係

Django REST Framework では、モデルの関係は、相互に関連するモデル内の一連のフィールドによって表されます。 たとえば、ユーザーを表すモデルには、名前と電子メール アドレスのフィールドがある場合があります。 ユーザーがメールアドレスを変更すると、フレームワークは名前フィールドも自動的に更新します。

モデルの関係を作成するには、まず、モデルの XNUMX つに XNUMX つのモデル間の関係を表すフィールドを作成する必要があります。 このフィールドの名前は、他のモデルのフィールドの名前と同じになります。 たとえば、ユーザー モデルと電子メール アドレス モデルの間にモデル関係を作成する場合は、ユーザー モデルに id_user というフィールドを作成し、電子メール アドレス モデルで id_email と呼びます。

次に、このリレーションシップに格納されるデータを表す関連フィールドを他のモデルに作成する必要があります。 この関連付けられたフィールドは、最初のモデルのフィールドと同じ名前で、アンダースコア ( _ ) が追加されている必要があります。 たとえば、各ユーザーの ID 番号を保存する場合は、ユーザー モデルに id_user フィールドを作成し、メール アドレス モデルで id_id と呼びます。

最後に、 secondmodel 内のフィールド間のすべての関係を表すタプルのリストを返す relationship() メソッドを firstmodel に追加する必要があります。 たとえば、「test」で終わる電子メール アドレスを持つすべてのユーザーを検索する場合は、次のように relationship() を使用します。

def relationship(self, other): return [ (id_user, id_email) for (id_user, id_email) in self._get_all() ]

REST フレームワークとは

REST Framework は、Django で RESTful Web サービスを作成するためのライブラリです。 他のアプリケーションで使用できる Web サービスを作成するためのシンプルで一貫した方法を提供します。

関連記事:

コメント