2016-11-14 8 views
0
class IndexView(generic.ListView): 
    template_name = "posts/index.html" 

    def get_queryset(self): 
     return Inspectionfile.objects.all() 

class DetailView(generic.DetailView): 
    model = Inspectionfile 
    template_name = "posts/detail.html" 


class createposts(CreateView): 
    model = posts 
    fields = ['title','comments'] 

через CreatePosts и с помощью формы можно заполнить заголовок и комментарии, но они не связаны с каким-либо Inspectionfile (иностранный ключ). Я хочу, чтобы пользователи были связаны без необходимости выбирать. Ниже приведена моя модель. Поэтому я хочу связать каждую запись с конкретным контрольным файлом.Как связать внешний ключ в основе зрения класса в Django

class Inspectionfile(models.Model): 
    document_upload = models.FileField() 
    document_type = models.CharField(max_length=10) 
    document_title = models.CharField(max_length=250) 
    document_check = models.CharField(max_length=250) 

    def __str__(self): 
     return (self.document_title + self.document_type) 


class posts(models.Model): 
    inspectionfile = models.ForeignKey(Inspectionfile, on_delete=models.CASCADE, default=1) 
    title = models.CharField(max_length=120) 
    comments = models.TextField() 
    flag = models.BooleanField(default=False) 

    def get_absolute_url(self): 
     return reverse('posts_form', kwargs={'pk': self.pk}) 

    def __str__(self): 
     return self.title 

форма представляет собой простой шаблон:

<form class = "form_horizontal" action = "" method = "post"> 
    {% csrf_token %} 
    {{form.as_p}} 
    <button type="submit">Submit</button> 
</form> 
+0

Вам нужно будет выслать ваши формы здесь, чтобы получить справку – YPCrumble

+1

Как вы выбираете, какой 'Inspectionfile' вам нужен для нового сообщения? –

+0

Это делается из шаблона индекса, поскольку он переходит к определенному файлу с помощью первичного ключа. Поэтому, когда вы нажимаете на файл, он переходит на страницу форм, но сообщения просто не подключаются к файлу, который является моей проблемой. –

ответ

0

Ну, я думаю, что вам нужно переопределить post метод в createposts зрения:

def post(self, request, *args, **kwargs): 
    current_inspectionfile = Inspectionfile.objects.get(pk= 
         #enter id of current file. If id is 
         #parameter in url then use self.kwargs['file_id'], 
         #where file_id is name of parameter in url 
        ) 
    new_post = posts.objects.create(inspectionfile=current_inspectionfile, 
         #and arguments from the form 
        ) 
    return new_post 

и вне темы: имена классов в Python обычно называются в CamelCase в единственном числе. Итак, class Post(models.Model) и class CreatePost(CreateView):

+0

Спасибо, что имеет смысл. Но когда вы говорите аргументы формы, вы видите, что у меня нет фактического form.py, есть способ вытащить атрибуты post из шаблона. –

+0

@ IshanSubedi проверить [это] (http://stackoverflow.com/questions/11336548/django-taking-values-from-post-request). И по форме я имею в виду форму в вашем шаблоне. –

+0

Знаете ли вы, почему я продолжаю получать: объект «posts» не имеет атрибута «get». Ссылка url.py кажется прекрасной. Это потому, что, поскольку мы создаем новый объект new_post и он не знает, что с ним делать? –