与django模型中的post save和__unicode __(self)冲突

时间:2016-07-18 21:18:08

标签: python django unicode foreign-keys

为这个奇怪的标题道歉,但是发现了一个有趣的问题,涉及与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()

在这种情况下,我发布的值(例如)' citation1' - 这里指的是主键I" m。我用" self.citation_name" (这是#34; Ainley等1995)在django admin中显示一个直观的名字。

然而,当我去保存时,这只是给我一个错误(例如,cite_id = Ainley等1995不存在)。

因此,它获取self.citation_name的值并返回它,然后尝试查找匹配的cite_id。但是,我希望它返回cite_id值,找到记录,同时在我的模型中维护self.citation_name,这样我就可以更轻松地读取管理记录。

非常感谢任何帮助 感谢

1 个答案:

答案 0 :(得分:0)

当然......总是很简单..我想当我试图分配" post.cite_id"时,它试图以一种有趣的方式将它分配给外键..修正了这个通过改变。

post.cite_id = .....

post.cite = .....