私はmodels.pyで、次のテーブルを持っている:これは正常に動作している一意でないIDを持つテーブルを作成し、それを別のテーブルの外部キーとするにはどうすればいいですか?
class Part(models.Model):
partno = models.CharField(max_length=50, unique=True)
partdesc = models.CharField(max_length=50, default=None, blank=True, null=True)
class Price(models.Model):
part = models.ForeignKey(Part, on_delete=models.CASCADE, null=True)
supplier = models.ForeignKey(Supplier, on_delete=models.CASCADE)
qty = models.IntegerField(default=1)
price = models.DecimalField(max_digits=9, decimal_places=2)
currency = models.ForeignKey(Currency, on_delete=models.CASCADE)
datestart = models.DateTimeField(auto_now_add=True, blank=False, null=False)
class Meta:
unique_together = (('supplier', 'part'),)
。問題は、私はそれらの交換品である多くの部品番号があることです。たとえば、部品1001-01,1001-02,1001-03はすべて同じ部品です。それでも、私はPartテーブルにそれらのすべてを持っています。
私はそれらを別のテーブルで照合する必要があるため、それぞれ別々に価格を入力する必要はありません。これらの3つの項目すべてを表す一意のキーが必要です。
質問:「パーツ番号一致テーブル」をセットアップし、このテーブルの外部キーを価格テーブルに設定するにはどうすればよいですか?
(休憩はこれまでのところ、私の意見/問題である読むことが任意である、しかし役立つかもしれない)
1:私はセットアップには、このようなテーブルを試してみました:
class PartMatch(models.Model):
id = models.IntegerField(primary_key=True, unique=False, null=False, db_index=True)
part = models.ForeignKey(Part, unique=False, on_delete=models.CASCADE)
移行中にエラーは発生しませんが、同じIDをPKに使用しようとすると、許可されません。
2:私は一人でPKを左にして部品を一致させるために、セットアップに別のフィールドを試してみました:
class PartMatch(models.Model):
part = models.ForeignKey(Part, on_delete=models.CASCADE)
partmatchid = models.IntegerField(null=True, unique=False, db_index=True)
移行中に、私はすべてのエラーを得ることはありませんが、私は外部キーとしてpartmatchid
を使用しようとすると、このような私のPrice
表に:
partmatch = models.ForeignKey(PartMatch, to_field="partmatchid",
db_column="partmatchid",
on_delete=models.CASCADE)
私は、移行中foreign key must be unique
を言って、エラーを取得します。
この場合、私は解決策がありません。私はあなたがこれをどう扱うのだろうか?
それを試してみましょう。ありがとう –
私はあなたが提案したことをしましたが、PartMatchテーブルからは1つのパーツだけの価格を表示できます。 Part.Partmatchid = Partmatch.id'の3つの部品番号の価格をすべて表示するにはどうすればいいですか? –
私は「価格 - >パート - パートマッチ」のパスをたどって、私が望むことをする方法を見つけることができなかったので、各パートの価格を個別に入力することを選択しました。それが私を助けたので私はあなたの答えを受け入れる。ありがとう。 –