У меня есть две модели, у которых есть отношения ManyToMany, Category и Post.Я пытаюсь включить две модели, post_form и category_form в одной и той же форме с помощью одной кнопки отправки. Как показать отношения, когда я его сохраню?Как связать отношения ManyToMany в одной форме с одной отправкой
В настоящее время, когда я добавляю то же имя категории для двух разных сообщений, это дает мне предупреждение о том, что он уже существует. Я хотел бы иметь возможность выбрать одно и то же имя категории в раскрывающемся списке или что-то подобное. Пожалуйста помоги. Если это невозможно, каковы мои альтернативы?
Models.py
class Category(models.Model):
category_name = models.CharField(max_length=250, unique=True)
category_slug = models.SlugField(max_length=250, unique=True)
class Post(models.Model):
STATUS_CHOICES = (
('draft', 'Draft'),
('published', 'Published'),
)
title = models.CharField(max_length=250)
slug = models.SlugField(max_length=250,
unique_for_date='publish')
body = models.TextField()
publish = models.DateTimeField(default=timezone.now)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
status = models.CharField(max_length=10,
choices=STATUS_CHOICES,
default='draft')
categories = models.ManyToManyField(Category)
def get_absolute_url(self):
return reverse('posts:post_detail',
args=[self.publish.year,
self.publish.strftime('%m'),
self.publish.strftime('%d'),
self.slug])
Views.py
def post_list(request):
queryset = Post.objects.all()
return render(request, 'posts/post_list.html', {'post_list': queryset})
def post_detail(request, year, month, day, post):
instance = get_object_or_404(Post, slug = post,
status = 'published',
publish__year = year,
publish__month = month,
publish__day = day)
return render(request, 'posts/post_detail.html', {'post':instance})
def post_create(request):
post_form = PostForm(request.POST or None)
category_form = CategoryForm(request.POST or None)
if post_form.is_valid() and category_form.is_valid():
post_form_instance = post_form.save()
category_form_instance = category_form.save()
print (request.POST)
print (post_form.is_valid)
context = {'post_form':post_form, 'category_form':category_form}
return render(request, 'posts/post_form.html', context)
forms.py
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = [
'title',
'slug',
'body',
'publish',
'status',
]
class CategoryForm(forms.ModelForm):
class Meta:
model = Category
fields = [
'category_name',
'category_slug',
]
post_form.html
<!--DOCTYPE html -->
<html>
<head>
</head>
<body>
<form method='POST'>{% csrf_token %}
<h1>Form</h1>
{{ post_form.as_p }}
{{ category_form.as_p }}
<input type="submit" value="Create Post" />
</form>
</body>
</html>
Спасибо большое. Я точно искал то, что вы просили меня попробовать. Можете ли вы мне помочь и сказать, как я могу добавить новые категории в одну и ту же форму? – user3052646