Могу ли я иметь две формы для редактирования профиля в django Одна из них - это основная форма для редактирования профиля, а 1 - только для 2 полей - PullRequest
0 голосов
/ 31 августа 2018

У меня есть модель профиля, в которой слишком много полей. Два поля lat и lon Я использую форму django для редактирования всех полей ниже

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    city = models.CharField(max_length=100)
    state = models.CharField(max_length=100, blank=True, null=True)
    country = models.CharField(max_length=100)
    street_address = models.CharField(max_length=500, null=True, blank=True)
    zip_code = models.CharField(max_length=10, default='')
    phone_number = models.CharField(max_length=17, blank=True, null=True)
    age = models.DateField(blank=True, null=True)
    member_since = models.DateTimeField(auto_now_add=True)
    profile_image = models.ImageField(default='', blank=True, null=True)
    bio = models.TextField(default='', blank=True)
    bio_images = models.ImageField(default='', blank=True, null=True)
    activities_i_do = models.TextField(default='', blank=True, null=True)
    activities_i_love = models.TextField(default='', blank=True, null=True)
    is_verified = models.BooleanField(default=False)
    lat = models.FloatField(blank=True, null=True)
    lon = models.FloatField(blank=True, null=True)

Ниже приведен вид редактирования атрибутов

@login_required
def edit_profile(request):
    if request.method == 'POST':
        user_form = UserEditForm(data=request.POST or None, instance=request.user)
        profile_form = ProfileEditForm(data=request.POST or None, instance=request.user.profile, files=request.FILES)
        if user_form.is_valid() and profile_form.is_valid():
                user_form.save()
                profile_form.save()
            return redirect('accounts:profile', username=request.user.username)
    else:
        user_form = UserEditForm(instance=request.user)
        profile_form = ProfileEditForm(instance=request.user.profile)

    context = {'user_form': user_form,
               'profile_form': profile_form}
    return render(request, 'accounts/profile_edit.html', context)

Теперь вопрос в том, можно ли использовать другую форму, чтобы просто отредактировать поля lat lon в приведенном выше примере модели, как показано ниже

        <form method="post" action="{{ ??????????? }}">
            <input id="jsLat" type="text" placeholder="latittude" >
            <input id="jsLon" type="text" placeholder="longitude">
            <button type="submit" id="submit">Submit</button>
        </form>

enter image description here

Я сделал форму с помощью jquery, чтобы при щелчке пользователя находить меня форма автоматически заполнялась и отправлялась сама. Можно ли использовать эту форму для редактирования всего 2 полей модели профиля

ниже находится форма для редактирования моего профиля

class ProfileEditForm(forms.ModelForm): #UserProfileForm or ProfileEdit
    class Meta:
        model = Profile
        fields = ('city', 'state', 'country', 'street_address', 'zip_code', 'phone_number', 'age', 'profile_image',
                  'bio', 'bio_images', 'activities_i_do', 'activities_i_love', 'lat', 'lon')

PS: Код геоджанго удален, чтобы сделать его простым. Просто нужно обновить lat lon, как если бы они были обычными полями

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Казалось, очень трудно иметь 2 формы редактирования для 1 объекта. Поэтому я разделил lat lon и сделал для него новую модель, которая

class UserLocation(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    lat = models.FloatField(blank=True, null=True)
    lon = models.FloatField(blank=True, null=True)

затем я использовал ту же HTML-форму выше, чтобы редактировать детали этого объекта в следующем вопросе

Редактирование объекта в форме HTML вместо формы модели Django

0 голосов
/ 31 августа 2018

Вам не нужно создавать другую форму. Поскольку вы не показывали свою форму, я предполагаю, что вы использовали

class ProfileForm(forms.ModelForm):
    class Meta:
        model = Profile
        fields = ('user', 'city', 'state'...)

То, что вы можете сделать, это визуализировать profile_form и использовать его следующим образом

    <form method="post" action="{{ ??????????? }}">
        <input id="jsLat" type="text" placeholder="latittude" value="{{profile_form.lat.value}}">
        <input id="jsLon" type="text" placeholder="longitude" value="{{profile_form.lon.value}}">
        <button type="submit" id="submit">Submit</button>
    </form>

at your views.py

profile_form = ProfileEditForm(request.POST)
profile_form.save()

Надеюсь, это поможет или даст вам идею! конечно, вам понадобится вставить какой-то первичный ключ или идентификатор в форму, чтобы вы могли получить контекст того профиля, который нужно редактировать.

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