Field is empty and field is required
. Почему выводится подобное сообщение, если поле image не пустое?class Article(models.Model):
description = models.TextField(_('Description'))
class Image(models.Model):
article= models.ForeignKey(Article, on_delete=models.CASCADE)
image = models.FileField(_('Image'), upload_to='images/%Y/%m/%d/')
class ArticleForm(forms.ModelForm):
class Meta:
model = Article
fields = ('description', )
image = MultiFileField()
def save(self, commit=True):
instance = super(ArticleForm, self).save(commit)
for each in self.cleaned_data['image']:
Image.objects.create(image=each, article=instance)
return instance
def article_add(request):
data = dict()
if request.method == 'POST':
article_form = ArticleForm(request.POST, request.FILES)
if article_form.is_valid():
article = article_form.save(commit=False)
******
article.save()
data['form_is_valid'] = True
articles = Article.objects.all
context = {'articles': articles}
context.update(csrf(request))
data['html_article'] = render_to_string('project/article_list.html', context)
else:
data['form_is_valid'] = False
else:
article_form = ArticleForm()
context = {'article_form': article_form}
data['html_article_form'] = render_to_string('project/article_add.html', context, request=request)
return JsonResponse(data)
{% load widget_tweaks %}
<form method="post" enctype="multipart/form-data" action="{% url 'article_add' %}" class="article-add-form">
{% csrf_token %}
{% for field in article_form %}
<div class="form-group{% if field.errors %} has-danger{% endif %}">
<label class="form-control-label" for="{{ field.id_for_label }}">{{ field.label }}</label>
{% render_field field class="form-control" %}
{% for error in field.errors %}
<div class="form-control-feedback">{{ error }}</div>
{% endfor %}
</div>
{% endfor %}
<button type="submit">Submit</button>
</form>
$(function () {
var loadForm = function () {
var btn = $(this);
$.ajax({
url: btn.attr("data-url"),
type: 'get',
dataType: 'json',
beforeSend: function () {
$("#modal").modal("show");
},
success: function (data) {
$("#modal .modal-content").html(data.html_article_form);
}
});
};
var saveForm = function () {
var form = $(this);
var dataForm = new FormData(form);
$.ajax({
url: form.attr("action"),
data: form.serialize(),
type: form.attr("method"),
dataType: 'json',
success: function (data) {
if (dataForm.form_is_valid) {
$("#article-list").html(data.html_article);
$("#modal").modal("hide");
}
else {
$("#modal .modal-content").html(data.html_article_form);
}
}
});
return false;
};
// Create Article
$("#article-add-button").click(loadForm);
$("#modal").on("submit", ".js-article-add-form", saveForm);
// Update Article
$("#article-list").on("click", "#js-edit-article-button", loadForm);
$("#modal").on("submit", ".js-article-edit-form", saveForm);
});
var dataForm = new FormData(form);
image = MultiMediaField(min_num=1, media_type='image')
Traceback (most recent call last):
File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\core\handlers\exception.py", line 39, in inner
response = get_response(request)
File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\core\handlers\base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\core\handlers\base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\reversion\revisions.py", line 296, in do_revision_context
return func(*args, **kwargs)
File "C:\Users\Nurzhan\PycharmProjects\RMS\project\views.py", line 1689, in article_add
article= article_form.save(commit=False)
File "C:\Users\Nurzhan\PycharmProjects\RMS\project\forms.py", line 271, in save
Image.objects.create(image=each, article=instance)
File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\db\models\query.py", line 399, in create
obj.save(force_insert=True, using=self.db)
File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\db\models\base.py", line 796, in save
force_update=force_update, update_fields=update_fields)
File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\db\models\base.py", line 824, in save_base
updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\db\models\base.py", line 908, in _save_table
result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\db\models\base.py", line 947, in _do_insert
using=using, raw=raw)
File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\db\models\query.py", line 1045, in _insert
return query.get_compiler(using=using).execute_sql(return_id)
File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\db\models\sql\compiler.py", line 1054, in execute_sql
cursor.execute(sql, params)
File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\db\backends\utils.py", line 79, in execute
return super(CursorDebugWrapper, self).execute(sql, params)
File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\db\backends\utils.py", line 64, in execute
return self.cursor.execute(sql, params)
File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\db\utils.py", line 94, in __exit__
six.reraise(dj_exc_type, dj_exc_value, traceback)
File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\utils\six.py", line 685, in reraise
raise value.with_traceback(tb)
File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\db\backends\utils.py", line 64, in execute
return self.cursor.execute(sql, params)
File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\sql_server\pyodbc\base.py", line 539, in execute
return self.cursor.execute(sql, params)
django.db.utils.IntegrityError: ('23000', '[23000] [Microsoft][ODBC SQL Server Driver][SQL Server]�������� ���������� INSERT � ������������ FOREIGN KEY "project_image_article_id_1cd62783_fk_project_article_code". �������� ��������� � ���� ������ "RMS", ������� "dbo.project_article", column \'code\'. (547) (SQLExecDirectW)')
// вместо
data: form.serialize(),
// надо
data: dataForm,
// ну и тут исправить
if (dataForm.form_is_valid) {
// на
if (data.form_is_valid) {
Image.objects.create(image=each, acticle=instance)
. Насколько она правильная по вашему мнению? Кстати, в роли первичного ключа в модели Article использую UUID. Не знаю может ли это влиять как-то на результат... def save(self, commit=True):
instance = super(ArticleForm, self).save(commit)
return instance
def save_images(self):
for each in self.cleaned_data['image']:
Image.objects.create(image=each, article=self.instance)
processData: false, contentType: false, cache: false,
как советовали люди в данном посте, но к сожалению не помогло. Создается объект Article, но изображений нет. Хотя возможно я что-то упустил... Что вы думаете? def article_add(request, project_code):
data = dict()
project = get_object_or_404(Project, pk=project_code)
if request.method == 'POST':
acticle_form = ArticleForm(request.POST, request.FILES)
if article_form.is_valid():
article = article_form.save(commit=False)
article.project= project
article.save()
for image in specification_form.cleaned_data['image']:
Image.objects.create(image=image, article=article)
File "C:\Users\Nurzhan\PycharmProjects\RMS\project\views.py", line 1681, in article_add
article.project = project
AttributeError: 'NoneType' object has no attribute 'project'
<img src="/media_root/images/{{ article.image }}">
{% for image in article.image_set.all %}
<img src='{{ image.url }}'>
{% endfor %}
article_form = ArticleForm(request.POST, request.FILES, instance=article)
будет ли выводится в поле image изображения текущей статьи для их дальнейшего редактирования или нужно еще что-то настраивать? class ImageForm(forms.ModelForm):
class Meta:
model = Image
fields = ('image', )
ImageFormSet = modelformset_factory(Image, max_num=0, form=ImageForm)
def article_edit(request):
if request.method == 'POST':
article_form = ArticleForm(request.POST, request.FILES, instance=article)
image_form = ImageFormSet(request.POST or None, request.FILES or None, queryset=Images.objects.filter(article=article_id))
****
else:
article_form = ArticleForm()
image_form = ImageFormSet()
<form>
{{ article_form }}
{{ image_form }}
</form>
if request.method == 'POST':
article_form = ArticleForm(request.POST, request.FILES, instance=article)
image_form = ImageFormSet(request.POST or None, request.FILES or None, queryset=Image.objects.filter(article=article_code))
if article_form.is_valid() or image_form.is_valid():
article_form.save()
image_form.save()
for image in specification_form.cleaned_data['image']:
Image.objects.create(image=image, specification=specification)
data['form_is_valid'] = True
articles= Article.objects.filter(project=project_code)
context = {'articles': articles}
context.update(csrf(request))
data['html_article'] = render_to_string('project/article_list.html', context)
else:
data['form_is_valid'] = False
else:
article_form = ArticleForm(instance=article)