2016-07-18 13 views
0

奇妙なタイトルに対する謝罪ですが、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値を返してレコードを探したいので、管理レコードを簡単に読むことができます。

すべてのヘルプは大
おかげ

常に当然の
+0

これは助けるが、 'リターンユニコード(self.citation_nameを)しようとするかどうかわからないように' '__unicode__'関数内。私はこれを数回しなければならないことを覚えていますが、それがこのようなシナリオに当てはまるかどうかは覚えていません。私は '__unicode__'はあなたが返す値がユニコードに変換されることを要求します。 – tear728

+0

ありがとう - しかし、トリックをしなかった。このエラーを取得します。 \t 'テーブルの挿入または更新" numeric_traits "が外部キーの制約に違反しています" numeric_traits_cite_id_fkey " DETAIL:キー(cite_id)=(Ainley 1995)はテーブル"引用 "にありません。 – GrantRWHumphries

答えて

0

...何か簡単な..私は「post.cite_id」を割り当てるしようとしていたとき、私は推測を高く評価され、それが外部キーに割り当てしようとしていました面白い方法で..これを変更することで解決しました。

post.cite_id = ..... 

post.cite = ..... 
関連する問題