Я надеюсь делать это:
class Place(models.Model):
name = models.CharField(max_length=20)
rating = models.DecimalField()
class LongNamedRestaurant(Place): # Subclassing `Place`.
name = models.CharField(max_length=255) # Notice, I'm overriding `Place.name` to give it a longer length.
food_type = models.CharField(max_length=25)
Это - версия, которую я хотел бы использовать (хотя я открыт для любого предложения): http://docs.djangoproject.com/en/dev/topics/db/models/#id7
Это поддерживается в Django? В противном случае есть ли способ достигнуть подобных результатов?
Он должен быть доступен где-либо, потому что если (в XP) вы идете в диспетчер устройств и выберите один из USB Root Hub, то это вкладка питания в диалоговом окне свойств, которая подробно описывает питание, которое было запрошено устройствами, подключенными к каждому из портов.
Я не программист окон, поэтому не знаю, как это выяснить программным путем.
-121--4028585-Почему вы на самом деле не закончили запись и компиляцию кода?
class Base
{
public: // add this
int someBaseMemer;
};
template<class T>
class Derived : public T
{
public: // add this
int someNonBaseMemer;
Derived(T* baseInstance)
: T(*baseInstance) // add this
{ return; } // add this
};
При этом выполняется компиляция в соответствии с указанными параметрами.
EDIT: Или вы имеете в виду, что someNonBaseMemer
должен равняться someBaseMemer
?
Вставил свой код в новое приложение, добавил приложение в INSTALLED_APPS и запустил syncdb:
django.core.exceptions.FieldError: Local field 'name' in class 'LongNamedRestaurant' clashes with field of similar name from base class 'Place'
Похоже, Джанго не поддерживает это.
Нет, это не :
«Скрытие» имени поля запрещено
В обычном наследовании классов Python, дочернему классу разрешено переопределять любой атрибут родительского класса. В Django этот не разрешен для атрибутов, которые являются экземплярами
Field
(по крайней мере, в настоящий момент). Если базовый класс имеет поле с именемauthor
, вы не можете создать другое поле модели с именемauthor
в любом классе, который наследуется от этого базового класса.
Возможно, вы могли бы разобраться с assign_to_class:
class LongNamedRestaurant(Place):
food_type = models.CharField(max_length=25)
def __init__(self, *args, **kwargs):
super(LongNamedRestaurant, self).__init__(*args, **kwargs)
name = models.CharField(max_length=255)
name.contribute_to_class(self, 'name')
Syncdb работает нормально. Я не пробовал этот пример, в моем случае я просто переопределил параметр ограничения, так что ... подожди и посмотри!