Djangoでwebサービスを作ってみました。完成はしましたが、ふんわりやっていたところを再度調べました。
models.pyで使ったあれこれ
例:
class Profile(models.Model):
~~フィールド定義省略~~
@receiver(post_save, sender=User)
def create_profile(sender, **kwargs):
if kwargs['created']:
user_profile = Profile.objects.get_or_create(user=kwargs['instance'])
def __str__(self):
return str(self.user)
@receiver
@receiverはシグナルというもので、イベントが発生したタイミングで登録した処理を呼び出す機能。
この例で使われたpost_saveは、senderで指定したモデル(ここではUser)に対するレコードの 追加 or 変更 をした 直後に実行されることを意味する。
**kwargs
kwargsのようにをつけた引数を定義すると、任意の数のキーワード引数を指定することができる。
関数の中では引数名がキーkey、値がvalueとなる辞書として受け取られる。
この例では、引数に送信者とこれを取り、if文でインスタンスが作成されたかを確認します。
get_or_create
オブジェクトが存在しなければ登録、存在してれば登録しない。
def str(self)
インスタンスにstrやprintを適用すると呼び出される処理
forms.pyで使ったあれこれ
例:
class CommentCreateForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
for field in self.fields.values():
field.widget.attrs['class'] = 'form-control'
class Meta:
model = Comment
fields = ('text',)
*args
可変長引数をtuple型で取るかdict型で取るかって意味です
*argsはtuple型
**kwargsはdict型
参考
class Meta
class Metaはフィールド定義じゃないものを定義する場です。
※フィールドはデータベースに登録される要素の事。
今回の例では、UserCreateFormのmodelとfieldsを定義しています。
fieldsではModelから入力フォームを生成する対象を定義しています。