私のTranslationRequest
モデルで一意制約を作成しようとしています。 TranslationRequest
は、他のDjangoアプリケーションに存在するMachineTranslator
モデルとの外部キー関係を持ちます。 syncdbを実行しようとすると、エラーが発生します。Error: One or more models did not validate: wt_articles.translationrequest: "unique_together" refers to translator, a field that doesn't exist. Check your syntax.
Django unique_togetherは、syncdbが実行されたときにアプリケーション間でForeignKeyフィールドを許可しません。
unique_constraint
仕様からtranslator
を削除すると、syncdbが正しく実行されます。注:バックエンドデータベースとしてSqlite3を使用しています。
TranslationRequest
とSourceArticle
の定義は次のとおりです。ここ
from wt_translation.models import MachineTranslator
class TranslationRequest(models.Model):
article = models.ForeignKey(SourceArticle)
target_language = models.ForeignKey(Language, db_index=True)
date = models.DateTimeField(_('Request Date'))
translator = models.ForeignKey(MachineTranslator),
status = models.CharField(_('Request Status'),
max_length=32,
choices=TRANSLATION_STATUSES)
class Meta:
unique_together = ("article", "target_language", "translator")
class SourceArticle(models.Model):
title = models.CharField(_('Title'), max_length=255)
language = models.ForeignKey(Language, db_index=True)
timestamp = models.DateTimeField(_('Import Date'), default=datetime.now())
doc_id = models.CharField(_('Document ID'), max_length=512)
source_text = models.TextField(_('Source Text'))
sentences_processed = models.BooleanField(_('Sentences Processed'))
は異なる(しかし参照Djangoアプリケーション)に、MachineTranslator
の定義です。
class MachineTranslator(models.Model):
shortname = models.CharField(_('Name'), max_length=50)
supported_languages = models.ManyToManyField(LanguagePair)
description = models.TextField(_('Description'))
type = models.CharField(_('Type'), max_length=32, choices=TRANSLATOR_TYPES, default='Serverland'),
timestamp = models.DateTimeField(_('Refresh Date'), default=datetime.now())
is_alive = models.BooleanField()
このコードサンプルには、すべての依存関係が含まれているわけではありません。ご協力いただきありがとうございます!
私は多分属性である理由ですmodels.ForeignKey(MachineTranslator)=あなたのトランスレータを宣言行の末尾に 『』「それはタイプミスであれば知っているが、私はSを参照してくださいコンマいけない
ありがとう、それは愚かな間違いでした。明らかに、コンマはunique_together経由でフィールドにアクセスしようとするとエラーが表示されただけです。そうでなければ、フィールドはコードのどこかで使用可能でした。 –