2010-02-08 36 views
0

我有一個模型類別具有一個外鍵到SimplePage模型。 nullblank設置爲True。問題是,當我從管理界面編輯類別時,我無法將ForeignKey更改爲---------(這看起來像管理員說的None的方式。)最初的值可以爲None,我可以將其更改爲實際值通過管理員,我可以更改爲另一個值,但一旦它有一個實際值,我不能將其更改回無。 (通過管理員,就是這樣)。Django:無法將外鍵值設置爲無從管理

這是爲什麼?

UPDATE:

下面是models.py代碼:

from django.db import models 
import tinymce.models 
from photologue.models import Photo 

from django.utils.translation import ugettext_lazy as _ 
import multilingual 

class SimplePage(models.Model): 

    slug = models.SlugField(
     _('Slug'), 
     unique=True, 
     help_text=_('''Unique identifier for URL. Only letters, digits, and -.\ 
e.g. history-oct-2000 or about''') 
    ) 

    category = models.ForeignKey('Category', 
           related_name='items_including_main_page', 
           blank=True, null=True) 

    class Translation(multilingual.Translation): 
     title = models.CharField(_('Title'), max_length=42) 
     content = tinymce.models.HTMLField(_('Content'), blank=True) 

    class Admin: 
     list_display = ('title',) 
     search_fields = ('title', 'content') 

    class Meta: 
     verbose_name = _('Simple page') 
     verbose_name_plural = _('Simple pages') 

    __unicode__ = lambda self: self.title 


class Category(models.Model): 
    main_page = models.OneToOneField(
     SimplePage, 
     related_name='_SimplePage__category_which_has_this_as_title', 
     blank=True, 
     null=True) 

    get_title = lambda self: self.main_page.title if self.main_page else u'' 

    get_items = lambda self: \ 
     self.items_including_main_page.exclude(id__exact=self.main_page.id) 

    __unicode__ = lambda self: self.get_title() or u'Titleless Category' 

    class Admin: 
     pass 

    class Meta: 
     verbose_name = _('Category') 
     verbose_name_plural = _('Categories') 

而且admin.py

from sitehelpers.models import * 
from django.contrib import admin 
import multilingual 

class SimplePageAdmin(multilingual.ModelAdmin): 
    pass 

admin.site.register(SimplePage, SimplePageAdmin) 

admin.site.register(Category) 
+0

我們怎麼能知道爲什麼,除非你向我們展示一些代碼? – 2010-02-08 14:40:11

+1

'required = True'? – tback 2010-02-08 15:56:06

+0

在模型中?第 – 2010-02-08 21:07:28

回答

2

也許那是因爲你還定義在類OneToOne關係,你可以」因此,打破這種關係。嘗試刪除它並查看,如果您可以將SimplePage中的類別設置爲無。

+0

我想我在我原來的問題中傳達錯誤:我不能改變爲'None'的關係是OneToOneField類別,而不是另一個。 此外,我現在確認我*可以*通過'manage.py shell'更改它,但仍然不通過管理員。 – 2010-02-10 12:42:02

+0

正如在下面的答案中,您不能將OneToOne關係更改爲無。因此,無論哪種方式,您都無法將管理員中的任何模型的值更改爲無。也許管理員爲此執行驗證,這就是爲什麼它不允許你改變它。無論如何,在一邊使用ForeignKey而在另一邊使用OneToOne並不是一個好方法。 – gruszczy 2010-02-10 13:04:31

+0

你能提出一個不同的架構嗎?每個類別都有一個SimplePage,它是它的主頁面,也是一堆SimplePages,它們是項目。你會怎麼做? – 2010-02-10 13:58:07

0

gruszczy以上是正確的,o2o關係的每一邊在賦值後都不能爲null,因爲django不會讓你在DB中有孤兒對象。