Django: Не могу установить значение ForeignKey в None от администратора - PullRequest
0 голосов
/ 08 февраля 2010

У меня есть категория модели, которая имеет ForeignKey для модели SimplePage. null и blank установлены в True. Проблема в том, что когда я редактирую категорию из интерфейса администратора, я не могу изменить ForeignKey на --------- (что похоже на способ администратора сказать None.) Первоначально значением может быть None, и я могу изменить его на фактическое значение через администратора, и я могу изменить на другое значение, но как только оно имеет фактическое значение, я не могу изменить его обратно на None. (Через админа то есть.)

Почему это?

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)

Ответы [ 2 ]

2 голосов
/ 10 февраля 2010

Может быть, это потому, что у вас есть отношение OneToOne, определенное также в категории, и поэтому вы не можете разорвать это отношение. Попробуйте удалить его и посмотрите, можете ли вы установить для категории в SimplePage значение Нет.

0 голосов
/ 10 февраля 2010

gruszczy выше верно, каждая сторона отношения o2o не может быть нулевой после того, как она была назначена, потому что django не позволит вам иметь потерянный объект в DB.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...