私は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_from
とlanguage_to
属性はありません。 モデルLanguage
にto
とfrom
の属性があり、 は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
この方法では、おそらく正常に動作しますが、多くの問題があります。
- 私はすべての仕事を
language_form
とlanguage_to
- 私は
class Meta:
内部
- 私はそれが直感的ではないと私はまだ知らない多くの問題があると思う。
language_from/to
フィールドを追加することはできませんので
JobCreationForm
を作成しようとしたときの問題がある上に正確有していなければならないことはDjangoを伝えることはできません
。
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)誰もが私が何をすべき知っていますか?