Tengo un formulario de ejemplo:Django ModelForm (con el campo excluido)
class AdminDiscountForm(ModelForm):
class Meta:
model = Discount
exclude = ('company',)
el modelo al que está señalando es:
class Discount(models.Model):
class Meta:
verbose_name=_('Discount')
verbose_name_plural=_('Discounts')
unique_together = ('company','type')
company = models.ForeignKey(Company)
type = models.CharField(max_length=5, choices=DISCOUNT_CHOICES)
discount = models.DecimalField(max_digits=7, decimal_places=2, verbose_name=_('Discount'))
La forma excluye campo de la 'compañía' porque el usuario tiene ya seleccionado esto usando la IU.
Estoy pensando en hacer un:
company = blah
if form.is_valid():
obj = form.save(commit=False)
obj.company = company
obj.save()
El problema es que la combinación de 'compañía' y 'tipo' debe ser único (de ahí el 'unique_together'). Esto se aplica en la base de datos, por lo que a django no le importa. I necesidad de extender el método clean() de esta forma para comprobar si hay singularidad como tal:
def clean(self):
cleaned_data = self.cleaned_data
# check for uniqueness of 'company' and 'type'
El problema aquí es que la 'compañía' no está ahí porque se ha excluido. ¿Cuál es la mejor manera de generar un error de validación de formulario en este caso?
- edit Esto es solo para sumando entradas de descuento. No hay instancia inicial.
respuestas que se encuentran aquí: http://stackoverflow.com/questions/2141030/djangos-modelform-unique-together-validation – gladysbixly