Борьба с основанной на классе формой Django (сохранение атрибутов внешнего ключа) - PullRequest
0 голосов
/ 18 марта 2020

Я импортировал мою 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.

Не могли бы вы мне помочь? Я уверен, это не так сложно. Спасибо

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