質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

1323閲覧

Django ManyToManyFieldを2つのクラスで使用したいです

Mario_11

総合スコア95

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2021/04/07 00:20

Django クラス内の変数を共有?したいです

現在、DjangoでSNS風のサイトを作っています。

python

1models.py 2 3class Post(models.Model): 4 post_user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) 5 title = models.CharField(verbose_name='タイトル',max_length=200,) 6 created_at = models.DateTimeField(verbose_name='登録日',auto_now_add=True) 7 image = StdImageField('画像', help_text='画像の推奨サイズ600×400', blank=True, null=True) 8 liked = models.ManyToManyField(User, blank=True, related_name='likes') 9 10class User(AbstractBaseUser, PermissionsMixin): 11 email = models.EmailField(_('email address'), null=True) 12 user_name = models.CharField(_('ユーザーネーム'), max_length=30,unique=True) 13 facebook = models.CharField('facebookアカウント名', help_text='idを入力してください', max_length=1000, blank=True,) 14 instgram = models.CharField('instgramアカウント名', help_text='ユーザーネームを入力ください', max_length=1000, blank=True,) 15 twitter = models.CharField('twitterアカウント名', help_text='@は付けずに入力してください', max_length=1000, blank=True,) 16 icon = StdImageField('アイコン', help_text='', blank=True, null=True) 17 favorite = models.ManyToManyField(Item, verbose_name='保存した記事', blank=True) 18 19 is_staff = models.BooleanField( 20 _('staff status'), 21 default=False, 22 help_text=_( 23 'Designates whether the user can log into this admin site.'), 24 ) 25 is_active = models.BooleanField( 26 _('active'), 27 default=True, 28 help_text=_( 29 'Designates whether this user should be treated as active. ' 30 'Unselect this instead of deleting accounts.' 31 ), 32 ) 33 date_joined = models.DateTimeField(_('date joined'), default=timezone.now) 34 35 objects = CustomUserManager() 36 37 EMAIL_FIELD = 'email' 38 USERNAME_FIELD = 'user_name' 39 REQUIRED_FIELDS = [] 40 41 class Meta: 42 verbose_name = _('user') 43 verbose_name_plural = _('users') 44 45 def get_user_name(self): 46 """Return the short name for the user.""" 47 return self.user_name 48 49 def email_user(self, subject, message, from_email=None, **kwargs): 50 """Send an email to this user.""" 51 send_mail(subject, message, from_email, [self.email], **kwargs) 52 53 @property 54 def username(self): 55 return self.email 56

お互いのクラスにManyToManyFieldを使用したいです、
勿論ですが、liked= の方にはNameError: name 'User' is not definedと出ます。

そもそもManyToManyFieldは二つのクラスで使用するものではないのでしょうか?
調べ方が分からず初歩的な質問でしたら申し訳ありません。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Postクラスの前にUserクラスを定義するか、下記ではどうでしょうか。

python

1class Post(models.Model): 2 liked = models.ManyToManyField('User', blank=True, related_name='likes')

投稿2021/04/07 01:02

hasami

総合スコア1277

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Mario_11

2021/04/07 02:46

できました!ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問