Django: Как использовать CreateView в одной модели и одновременно обновлять поле во второй модели. (Использование формы только в шаблонах)
Я не смог найти прямой ответ в другом месте. Я создал модель Group Model и модель GroupMember.
Моя цель состоит в том, чтобы пользователь создавал группу через форму в шаблонах, тогда автоматически в модели GroupMember должны заполняться поля. В частности, поле is_admin
должно быть равно 1, хотя его значение по умолчанию установлено на 0. Как сказать CreateGroupView
, чтобы GroupMember
заполнил модель
views.py
class CreateGroupView(LoginRequiredMixin, CreateView):
fields = ("name","description")
model = Group
class SingleGroupView(DetailView):
model = Group
class ListGroupView(ListView):
model = Group
models.py
class Group(models.Model):
name = models.CharField(max_length=255, unique=True)
slug = models.SlugField(allow_unicode=True, unique=True)
description = models.TextField(blank=True, default='')
members = models.ManyToManyField(User,through="ProjectMember")
def __str__(self):
return self.name
def save(self, *args, **kwargs):
self.slug = slugify(self.name)
super().save(*args, **kwargs)
def get_absolute_url(self):
return reverse("groups:single", kwargs={"slug": self.slug})
class GroupMember(models.Model):
user = models.ForeignKey(User,related_name='user_groups',on_delete=models.CASCADE,)
group = models.ForeignKey(Group, related_name="memberships",on_delete=models.CASCADE,)
is_admin = models.BooleanField(default=False)
def __str__(self):
return self.user.username
class Meta:
unique_together = ("group", "user")
мой шаблон для создания группы
<form class="m-5" method="POST" action="{% url 'groups:create' %}" id="groupForm">
{% csrf_token %}
<div class="form-group">
<label for="id_name">Name</label>
<input type="text" name="name" maxlength="255" class="form-control" placeholder="Name" title="" required id="id_name">
</div>
<div class="form-group">
<label for="id_description">Description</label>
<textarea name="description" cols="40" rows="10" class="form-control" placeholder="Description" title="" id="id_description"></textarea>
</div>
<input type="submit" value="Create" class="btn btn-primary btn-large">
</form>
urls.py
urlpatterns = [
path('', views.ListGroupView.as_view(), name="all"),
path("new/", views.CreateGroupView.as_view(), name="create"),
path("group/<slug>/",views.SingleGroupView.as_view(),name="single"),
]