Как связать ForeignKey при использовании ModelForm для создания объекта? - PullRequest
0 голосов
/ 21 января 2020

Я пытаюсь создать доску объявлений. У меня есть следующие models.py. Пользователь создает бизнес один раз (но может создать более одного), а затем публикует несколько заданий из этого бизнеса:

class Business(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    name = models.CharField(max_length = 200)
    address = models.CharField(max_length = 200)
    city = models.CharField(max_length = 100)
    state = models.CharField(max_length = 50)
    zip_code = models.CharField(max_length = 10)
    phone_number = models.CharField(max_length = 10)

class Job(models.Model):
    business = models.ForeignKey(Business, on_delete= models.CASCADE)
    title = models.CharField(max_length = 200)
    description = models.TextField(blank = True)

Я пытаюсь использовать ModelForm для создания представления «опубликовать работу». forms.py:

from django.forms import ModelForm
from .models import Job

class JobForm(ModelForm):
    class Meta:
        model = Job
        fields = ['title', 'description']

Теперь views.py:

from .models import Business, Job
from .forms import JobForm
def post_job(request):
    if request.method == 'POST':
        form = JobForm(request.POST
        if form.is_valid():
            # how do I associate a business with an instance of a job before saving the object?
            form.save()
    else:
        form = JobForm()
    return render(request, 'job/post_job.html', {'form':form})

Я пытался form.business = request.user.business, думая, что каждый Business связан с User, но это не работает , Спасибо за любую помощь.

1 Ответ

1 голос
/ 21 января 2020
    if request.method == 'POST':
        form = JobForm(request.POST)
        if form.is_valid():
            instance = form.save(commit=False)
            instance.business = Business.objects.get(user=request.user)
            instance.save()
    else:
        form = JobForm()

Таким образом, вы можете назначить его.

...