Я безнадежно пытался заставить это работать.
У меня есть модель, которая содержит 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?')