奇妙なタイトルに対する謝罪ですが、post.save(フォームから)との競合に関する面白い問題に巻き込まれ、unicode(self)return myモデル。この場合djangoモデルのpost saveと__unicode __(self)との競合
Models.py
class NumericTraits(models.Model):
feature_id = models.IntegerField(primary_key=True)
species = models.ForeignKey('Species')
traits = models.CharField(max_length=30)
cite = models.ForeignKey(Citation)
username = models.CharField(max_length=30)
dt = models.CharField(max_length=30)
def __unicode__(self):
return self.species_id + self.traits + self.cite_id
class Meta:
db_table = 'numeric_traits'
verbose_name = "Numeric Traits"
verbose_name_plural = "Numeric Traits"
class Citation(models.Model):
cite_id = models.CharField(primary_key=True, max_length=25, default=citation_id_create)
citation_name = models.CharField(max_length=100)
citation = models.TextField()
def __unicode__(self):
return self.citation_name
class Meta:
managed = False
db_table = 'citation'
ordering = ['citation_name']
views.py
def dbPost(request):
if request.method == 'POST':
form = PostForm(request.POST)
if form.is_valid():
post = form.save(commit = False)
citeId = request.POST.get("citation", "")
post.cite_id = Citation.objects.get(cite_id = citeId)
post.save()
return render(request, 'app/SaveSuccess.html')
else:
form = PostForm()
、Iは、(例えば) 'citation1' の値転記してい - プライマリーキーIを指し"mをここで使用します。私は" self.citation_name "(" Ainley et al 1995 ")を使用して、django管理者に直感的な名前を表示します。
しかし、保存するとエラーになります(例:cite_id = Ainley et al 1995は存在しません)。
したがって、self.citation_nameの値を受け取り、それを返してから一致するcite_idを見つけようとしています。しかし、自分のモデルにself.citation_nameを維持しながら、cite_id値を返してレコードを探したいので、管理レコードを簡単に読むことができます。
すべてのヘルプは大
おかげ
これは助けるが、 'リターンユニコード(self.citation_nameを)しようとするかどうかわからないように' '__unicode__'関数内。私はこれを数回しなければならないことを覚えていますが、それがこのようなシナリオに当てはまるかどうかは覚えていません。私は '__unicode__'はあなたが返す値がユニコードに変換されることを要求します。 – tear728
ありがとう - しかし、トリックをしなかった。このエラーを取得します。 \t 'テーブルの挿入または更新" numeric_traits "が外部キーの制約に違反しています" numeric_traits_cite_id_fkey " DETAIL:キー(cite_id)=(Ainley 1995)はテーブル"引用 "にありません。 – GrantRWHumphries