2014-09-18 2 views
0

Я пытаюсь создать функцию, которая позволяет людям публиковать что-то на соответствующей странице пользователя. Я создал как модель «newpost», так и «newpostform» (ниже). У меня возникла проблема с записью функции просмотра, чтобы посмотреть на текущий URL-адрес страницы, а затем взять этот параметр и автоматически прикрепить его к полю ForeignKey модели newpost. Например, если я нахожусь на URL myapp.com/userpage1, и я нажимаю кнопку «post» на этой странице, я хочу создать объект newpost, который автоматически заполняет поле ForeignKey как «userpage1». В основном, я пытаюсь создать приложение, в котором люди могут легко перемещаться по пользовательским страницам, введя параметр страницы пользователя в URL-адрес и легко делать сообщения на этих страницах быстро и кратко - вроде как работает система subreddit reddit, введя имя субредакта в в строке URL. Спасибо за любую помощь и подсказки.Извлечение атрибута ForeignKey на основе URL-адреса веб-сайта?

модель:

class newpost(models.Model): 
    newlinktag = models.ForeignKey(‘userpage’) #tags link to which userpage the post belongs to 
    postcontent = models.CharField(max_length=1024) 
    postdate = models.DateTimeField(auto_now_add=True) #submission timestamp. 
    postlikes = models.IntegerField(null=False, default=0) 

    def __unicode__(self): 
     return self.postcontent 

форма:

class newpostform(forms.ModelForm): 
    postcontentform = models.CharField(max_length=1024)  
    class Meta: 
     model = newpost 

ответ

1

urls.py :

url(r'^(?P<url_user_id>[\w\-]+)/$', your_view) 

views.py

def your_view(request, url_user_id) 
    # you have the foreign key in the url_user_id field. 
    ... 
    if request.POST: 
     new_post_with_foreign_key = newpost(newlinktag=url_user_id, ...) 
     ... 
     new_post_with_foreign_key.save() 
+0

У меня возникли проблемы только с частью URL-адреса кода Можете ли вы объяснить, что означает [\ w \ -] +? Как это выглядело: url (r '^ (? P [a-zA-Z0-9 _.-] *)/comment $' – EazyC

+0

Я думаю, вы хотите использовать + вместо * ... \ w \ - соответствует символам слов и дефисам, что очень похоже на ваше решение. Я не уверен на 100%, почему ваш не работает, но дайте мне попробовать , –

1

Не делайте это в форме. Исключить поле FK из модели в целом и установить его в представлении «Сохранить».

if form.is_valid(): 
    post = form.save(commit=False) 
    post.newlinktag = page 
    post.save() 

(Вы могли бы рассмотреть следующие PEP8 и используя некоторые CapitalLetters в именах классов, и underscore_names в именах полей. Это сделает ваш код гораздо легче читать.)

+0

Спасибо за подсказку. Когда вы говорите, что не делаете этого в форме, вы имеете в виду просто не иметь ModelChoiceField в форме и просто сохранять поле newlinktag в модели, когда у меня завершена модель Form (которая по существу будет только введенным текстом пользователя , правильно?) Кроме того, если бы вы могли, можете ли вы дать мне несколько советов о том, как правильно выполнить отображение URL? У меня возникли проблемы с получением моего urls.py, чтобы правильно составить карту страницы. В настоящее время у меня есть: url (r '^ (? P [a-zA-Z0-9 _.-] *)/comment $' – EazyC

Смежные вопросы