Проверка Django ModelForm на основе определенных обстоятельств? - PullRequest
1 голос
/ 01 сентября 2011

У меня есть форма:

class AdForm(ModelForm):
    class Meta:
        model = Ad
        widgets = {
            'title': TextInput(attrs={'class': 'small'}),
            'link': TextInput(attrs={'class': 'large'}),
            'code': Textarea(attrs={'class': 'limit', 'cols': 60, 'rows': 20}),
            'clicks': TextInput(attrs={'class': 'tiny', 'value': 0}),
        }

Исходя из:

TYPE_CHOICES = (
    ('Image', 'Image'),
    ('Code', 'Code'),
)

SIZE_CHOICES = (
    ('Leaderboard', 'Leaderboard'),
    ('Banner', 'Banner'),
    ('Skyscraper', 'Skyscraper'),
    ('Square', 'Square'),
)

class Ad(models.Model):
    title = models.CharField(max_length=40)
    type = models.CharField(max_length=5, choices=TYPE_CHOICES)
    size = models.CharField(max_length=11, choices=SIZE_CHOICES)
    link = models.URLField(null=True)
    media = models.ImageField(null=True, upload_to='ads')
    code = models.TextField(null=True, max_length=500)
    clicks = models.IntegerField()
    created = models.DateTimeField(auto_now_add=True)
    expires = models.DateTimeField(null=True)

    def __unicode__(self):
        return self.name

и, в основном, если указан тип изображения, я хочу, чтобы ссылка и носитель требовались, однако, если это код IТребуется код.Есть ли способ сделать это или принудительно проверить эти поля на основе определенных условий?

Мой текущий метод обработки ниже:

@login_required
def create(request):
    if request.POST:
        form = AdForm(request.POST)

        if form.is_valid():
            status = 'Success'
        else:
            status = 'Failure'
    else:
        form = AdForm()
        status = 'None'

    template = loader.get_template('ads/create.html')
    context = RequestContext(request, {
        'form': form,
        'status': status
    })

    return HttpResponse(template.render(context))

Я посмотрел в документации, но он сказал, чтобы принудительно сохранитьЕсть ли другой способ лучше?Большое спасибо от Джанго Нуб.

1 Ответ

1 голос
/ 01 сентября 2011

Посмотрите документацию для форм вокруг проверочных полей, которые зависят от других полей: https://docs.djangoproject.com/en/1.11/ref/forms/validation/#cleaning-and-validating-fields-that-depend-on-each-other

Ваша модель должна будет оставить поля пустыми, чтобы вы не получили требуемые ошибки проверки отмодель, когда определенные комбинации являются недействительными.Вместо этого убедитесь, что на уровне формы существует правильная комбинация значений полей.

Надеюсь, что это поможет вам.

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