2011-06-20 25 views
8

編輯:我之前並不清楚,我將我的對象保存在django管理面板中,而不是視圖。即使當我保存沒有多對多關係的對象時,我仍然會得到錯誤。Django的管理員 - 實例需要有一個主鍵值之前,可以使用多對多的關係

我有一個叫TogglDetails模型具有與標準的Django User模型ForeignKey關係,並與一個名爲Tag模型MayToManyField關係。我已經使用django admin註冊了我的模型,但是當我嘗試保存TogglDetails實例時,我在標題中看到錯誤。

這裏是我的模型:

class Tag(models.Model): 
    name = models.CharField(max_length=30) 

    def __unicode__(self): 
     return self.name 


class TogglDetails(models.Model): 
    token = models.CharField(max_length=100) 
    user = models.ForeignKey(User) 
    tags = models.ManyToManyField(Tag, blank=True, null=True) 

    def __unicode__(self): 
     return self.user.username 

    class Meta: 
     verbose_name_plural = "toggl details" 

據我所知,應該沒有問題,我的模型和Django管理應該只是保存實例沒有任何問題。有沒有明顯的我已經錯過了?

我使用Django 1.3

+0

我有同樣的問題,以及...我似乎沒有之前記住它...誰知道。 –

+0

你能粘貼錯誤嗎? – ghostJago

回答

0

不要讓我們猜測,並添加錯誤信息到你的問題,這給在哪裏失敗最多的信息。

您是否導入了用戶模型?

from django.contrib.auth.models import User 
+0

是的,我已經導入了用戶模型,錯誤信息在'ValueError:'標題中。'TogglDetails'實例需要有一個主鍵值才能使用多對多關係。' –

0

我也遇到過這個問題,我唯一能做的就是將M2M字段留空並且不設置它們直到我點擊保存並繼續編輯。

我認爲這可能只是一個框架疣,因爲你會注意到管理網站的用戶部分也有一個非常嚴格的「你只能編輯這些字段,直到你保存模型」。

所以我的建議是採用該方案,並隱藏M2M表單字段,直到模型具有主鍵。

0

我試過使用CPython的Django 1.3,使用不同的數據庫設置。我複製粘貼,從問題的模型,並做了一些變化:首先我加

from django.contrib.auth.models import User 

在文件的頂部,我把參考Tag引號之間。這應該沒有什麼區別。此外,我創建了以下admin.py:

from django.contrib import admin 
import models 

admin.site.register(models.Tag) 
admin.site.register(models.TogglDetails) 

對於SQLITE3,不會發生所述的問題,既不是MySQL的。所以我嘗試了PostgreSQL,後端是postgresql_psycopg2。同樣的事情:我無法重現錯誤。

因此,據我所知,問題中的代碼沒有任何問題。問題必須在別處。

3

如前所述其他用戶:沒有屬性「歸」不要在Django 1返回一個ID

Postgres的序列。3

在我的Postgres數據庫裏的序列不具有的屬性設置,沒有返回時,一個新條目保存到數據庫

另外一個id「歸」: 這是最有可能造成通過一個向後不兼容的變化,使定製模型中的一些主鍵類型超出了Django 1.3的範圍。有關更多信息,請參閱Django trac門票https://code.djangoproject.com/ticket/13295http://code.djangoproject.com/ticket/15682

我解決了這個問題,運行受影響的表/序列的後續命令。

具體運行以下命令:

manage.py dbshell 
ALTER SEQUENCE tablename_colname_seq OWNED BY tablename.colname; 

變化tablename_colname_seq和tablename.colname

相關問題