2016-06-24 11 views
0

私はDjango:別のモデルからモデルのデータを生成するには?

class book(models.Model): 
    title = models.CharField(max_length=200) 
    author = models.CharField(max_length = 200) 

class author(models.Model): 
    name = models.CharField(max_length=200) 
    GENDER = (
     ('M', 'Male'), 
     ('F', 'Female') 
    ) 
    gender = models.CharField(max_length=1, choices=GENDER) 

は、2つのモデルをリンクする外部キーを使用して、書籍情報(ユーザー入力)から自動的に著者を生成しないことが可能であり、本と著者のために作成された2つの異なるモデルがありますか? ありがとうございます!

+0

はい、可能ですが、データを効率的にモデル化する方法について考える必要があります。 'book'モデルの' author'フィールドを 'author'モデルの外部キーにするのはおそらくもっと意味があります。 – solarissmoke

+0

自動作成者は何を意味しますか?あなたは、ブッククラスのユーザーから提供された情報を使用してクラス作成者を生成することを意味します。 – shining

+0

ForeignKeyを作成するには、これら2つのモデルの中で最も自然なデザインを使用します。これは、あなたがdjangoを使用するかどうかに関係なく真です。 BTWのモデル名は、大文字で始まる必要があります(コンベンション) – e4c5

答えて

2

Djangoのsignalsを使用できます。新しいAuthor毎回新しいBookを作成します

@receiver(post_save, sender=Book) 
def make_author(sender, instance, created, **kwargs): 
    if created: 
     Author.objects.create(name=instance.author) 

Book.authorフィールドからnameを使用して、作成されました。

BookモデルのBook.objects.create()メソッドを上書きし、Bookモデルの中からAuthorインスタンスを直接作成する方法もあります。利点は、(2つの)オブジェクトを作成するときに、より多くのデータを直接追加できるようにすることです。欠点は、BookAuthorの存在に依存することになります。

+0

ありがとう、これはまさに私が探しているものです:)それを感謝! – DanielleC

関連する問題