2016-04-13 3 views
0

私は2つの属性(モデル)を持たなければならないモデルを適切に作成する方法を理解しようとしており、いくつかの条件を満たす必要があります。ManyToOneのようなフィールドを持つモデルを作成するには?

したがって、モデルはJobと呼ばれます。

Jobは、ある言語(モデルLanguage)から別の言語(モデルLanguageも)への翻訳を購入することを表します。

Jobは、正確に1 language_from属性と正確に1 language_to属性を持つ必要があります。

私の古いモデル:

class Language(models.Model): 
    shortcut = models.CharField(max_length=40) 
    name = models.CharField(max_length=40) 

    def __str__(self): 
     return self.name 

class Job(models.Model): 
    customer = models.ForeignKey(User, related_name='orders') 
    translator = models.ForeignKey(User, related_name='jobs',null=True) 
    price = models.FloatField(null=True,blank=True) 

    language_from = # Didn't know what to put here 
    language_to = # Didn't know what to put here 

    def __str__(self): 
     return '{}: {}'.format(self.customer,) 

私は私はいくつかのManyToOneフィールドについては、しかし、それを動作させるためにどのような方法を探していたが、私はそのようなフィールドが存在しないことに気づきました。だから私、私のモデルをこのように再構築するためにadvicedてきた:

仕事にはlanguage_fromlanguage_to属性はありません。 モデルLanguagetofromの属性があり、 はForeignKeyになります。

のでJobは、その代わりに、Languageモデルの属性が存在することになる、language_from/to属性を持っていないでしょう。

class Language(models.Model): 
    shortcut = models.CharField(max_length=40) 
    name = models.CharField(max_length=40) 
    job_from = models.ForeignKey('Job',related_name='language_form',null=True) 
    job_to = models.ForeignKey('Job',related_name='language_to',null=True) 

    def __str__(self): 
     return self.name 

この方法では、おそらく正常に動作しますが、多くの問題があります。

  1. 私はすべての仕事を language_formlanguage_to
  2. 私はclass Meta:
  3. 内部 language_from/toフィールドを追加することはできませんので JobCreationFormを作成しようとしたときの問題がある上に正確有していなければならないことはDjangoを伝えることはできません
  4. 私はそれが直感的ではないと私はまだ知らない多くの問題があると思う。

class JobCreationForm(forms.ModelForm): 
    description = forms.CharField(widget=forms.Textarea(attrs={'placeholder': 'Specification'})) 
    file = forms.FileField() 


    class Meta: 
     model = Job 
     fields = (
      'language_from','language_to', 'description', 'file', 'specialist' 
     ) 

例外値:ジョブ

に指定さ 未知のフィールド(複数可)(language_from、language_to)誰もが私が何をすべき知っていますか?

答えて

0

まず、フィールドに関連する名前を使用することはできません()。 だから、変更

fields = (
     'language_from','language_to', 'description', 'file', 'specialist' 
    ) 

fields = (
     'job_from','job_to', 'description', 'file', 'specialist' 
    ) 

次に、あなたが&から各ジョブの言語を言語を持っているしたい場合に、あなたがこれを行うことができますので、これらは、必須フィールドです:

job_from = models.ForeignKey('Job',related_name='language_form') 
job_to = models.ForeignKey('Job',related_name='language_to') 

https://docs.djangoproject.com/en/1.9/ref/forms/fields/#required

関連する問題