Я импортировал мою MySQL DB в Django. В этой БД у меня есть промежуточная таблица под названием GroupUsers, которая связывает User и GroupName .
. Я хотел бы создать форму, в которой я могу заполнить пользовательские атрибуты и добавить ее непосредственно в выбранная группа.
Таким образом, у нас есть пользовательская форма с дополнительным полем, соответствующим группам, которые мне нужно выбрать среди трех категорий: семья, друзья, профи.
Я не могу чтобы заставить его работать.
#models.py
class GroupUsers(models.Model):
group = models.ForeignKey(GroupName, on_delete=models.CASCADE)
user = models.ForeignKey('User', on_delete=models.CASCADE)
class Meta:
managed = False
db_table = 'group_users'
unique_together = (('group', 'user'),)
def __str__(self):
return self.group.name
class User(models.Model):
email = models.CharField(unique=True, max_length=180)
last_name = models.CharField(max_length=32)
first_name = models.CharField(max_length=32)
class Meta:
managed = False
db_table = 'user'
verbose_name = "user"
def __str__(self):
return self.first_name
class GroupName(models.Model):
group_id = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
description = models.TextField(blank=True, null=True)
class Meta:
managed = False
db_table = 'group_name'
verbose_name = 'Group'
def __str__(self):
return self.name
#forms.py
class UserCreateForm(forms.ModelForm):
class Meta:
model = User
fields = ('first_name','last_name', 'email')
def __init__(self, *args, **kwargs):
super(UserCreateForm, self).__init__(*args, **kwargs)
self.fields['group'] = forms.ModelChoiceField(queryset=GroupName.objects.all())
#view.py
class UserCreateView(SuccessMessageMixin, LoginRequiredMixin, CreateView):
template_name = 'dashboard/users/user_create_form.html'
model = User
form_class = UserCreateForm
def get_object(self, queryset=None):
obj = super().get_object(queryset)
return obj
def get_success_url(self):
messages.success(self.request, "The user %s was added successfully" % (
self.object.first_name))
return reverse_lazy('dashboard:user')
def form_valid(self, form):
group = form.cleaned_data['group']
return super().form_valid(form)
На данный момент, я застрял. Я не знаю, как я могу сохранить GroupUser, потому что он состоит из двух объектов: пользователя и имени группы. У меня нет доступа к идентификатору группы.
Я пытался использовать подход фабрики встроенных форм, но я не смог получить результат.
Возможно, я хотел бы сделать это чтобы сделать следующее (псевдокод)
def form_valid(self, form):
group = form.cleaned_data['group']
user = getUser()
group_user = GroupUser.objects.create(user=user, groupName=group)
group_user.save()
return super().form_valid(form)
Дело в том, что я не знаю, как получить объект, так как, например, для группы, у меня есть только доступ к полю char, а не ID.
Не могли бы вы мне помочь? Я уверен, это не так сложно. Спасибо