Django-nonrel использует ListField, содержащий EmbeddedObjects в админке - PullRequest
3 голосов
/ 18 января 2012

Я безнадежно пытался заставить это работать.

У меня есть модель, которая содержит ListField из EmbeddedObjects, в основном это аукцион на аукционе, который содержит список предложений. Типичный подход MongoDB.

Я понимаю, что ListField не отображается в админке, поскольку он не знает, какой виджет отображать, это может быть список чего угодно. Это имеет смысл.

Я создал файл fields.py в папке приложения и вложенный класс ListField, и теперь я использую это в моем models.py

Мой вопрос:

  • Как мне продолжать идти с этого момента, пока не появится виджет на моей странице администратора в разделе «Предмет», где я могу добавить ставки к выбранному предмету?

Вот мой model.py

from django.db import models
from djangotoolbox.fields import ListField
from djangotoolbox.fields import EmbeddedModelField
from ebay_clone1.fields import BidsListField

class User(models.Model):
    name = models.CharField(max_length=100)
    email = models.EmailField(max_length=75)
    def __unicode__(self):
        return self.name

class Item(models.Model):
    seller = models.ForeignKey(User, null=True, blank=True)
    title = models.CharField(max_length=100)
    text = models.TextField()
    price = models.FloatField()
    dated = models.DateTimeField(auto_now=True)
    num_bids = models.IntegerField()
    bids = BidsListField(EmbeddedModelField('Bid'))
    item_type = models.CharField(max_length=100)
    def __unicode__(self):
        return self.title


class Bid(models.Model):
    date_time = models.DateTimeField(auto_now=True)
    value = models.FloatField()
    bidder = models.ForeignKey(User, null=True, blank=True)

В моем fields.py у меня есть:

from django.db import models
from djangotoolbox.fields import ListField
from djangotoolbox.fields import EmbeddedModelField
from django import forms

class BidsListField(ListField):
    def formfield(self, **kwargs):
        return None

class BidListFormField(forms.Field):
    def to_python(self, value):
        if value in validators.EMPTY_VALUES:
            return None
        return value

    def validate(self,value):
        if value == '':
            raise ValidationError('Empty Item String?')

1 Ответ

1 голос
/ 25 января 2012

Попробуйте это?

class BidsListField(ListField):
    def formfield(self, **kwargs):
        return BidListFormField(**kwargs)
...