簡體   English   中英

將用戶與帖子 Django 和 MySQL 相關聯

[英]associate the user with the post Django and MySQL

我正在嘗試將用戶與帖子相關聯。 我有兩個模型學生用於用戶,子列表用於帶有外鍵(作者)的用戶帖子。 我正在使用 MySQL 數據庫並使用表單將數據存儲到其中。 當我的 form.author 在我的 HTML 文件中執行時,它為我提供了數據庫中所有用戶的 ID 列表,但我已經登錄,我想以登錄用戶的身份發布而不選擇。 如果刪除它說我的表單無效,這是有道理的,因為我沒有輸入 form.author。因為我使用 MySQL,我沒有使用內置的用戶身份驗證方法,而是將電子郵件和密碼與登錄表單輸入。 花太多時間在這上面但很難解決這個問題。 任何幫助,將不勝感激

我的 views.py 看起來像這樣

def addnew(request):
if request.method == 'POST':
    form = Sublist(request.POST)
    if form.is_valid():
        try:
            form.save()
            messages.success(request, ' Subscirption Saved')
            name = sublist.objects.get(name=name)
            return render (request, 'subscrap/main.html', {'sublist': name})
        except:
            pass
    else:
        messages.success(request, 'Error')
        pass
else:
    form = Sublist()
return render(request, 'subscrap/addnew.html', {'form': form})


@login_required(login_url='login')
@cache_control(no_cache=True, must_revalidate=True, no_store=True) 
def main(request):
    return render(request, 'subscrap/main.html')
    


def mod(request):
    student = students.objects.all()
    return render(request, 'subscrap/mod.html' , {'students': student})

我的模型.py

class students(models.Model):
    fname = models.CharField(max_length=50)
    lname = models.CharField(max_length=50)
    password = models.CharField(max_length = 50 , null = True)
    passwordrepeat = models.CharField(max_length = 50, null = True)
    email = models.EmailField(max_length=150)
    class Meta:
        db_table = "students"

class sublist(models.Model):
    author = models.ForeignKey(students, related_name='sublist' ,on_delete=models.CASCADE)
    name = models.CharField(max_length=150)
    cost = models.IntegerField(default = 0)
    renewalcycle = models.IntegerField(default = 0)
    class Meta:
        db_table = "sublist"

因為我在使用表單,所以這里是我的forms.py

lass StudentForm(forms.ModelForm):
    class Meta:
        model = students
        fields = "__all__"

class Studentlogin(forms.Form):
    email = forms.EmailField(max_length=150)
    password = forms.CharField(max_length = 50, widget=forms.PasswordInput)
    
class Sublist(forms.ModelForm):
    class Meta:
        model = sublist
        fields = "__all__"

Sublist排除Author

class Sublist(forms.ModelForm):
    class Meta:
        model = sublist
        exclude = ['author']

addnew方法中,您將.instance.authorrequest.user相關聯:

@login_required(login_url='login')
def addnew(request):
    if request.method == 'POST':
        form = Sublist(request.POST)
        if form.is_valid():
            form.instance.author = request.user
            form.save()
            messages.success(request, ' Subscirption Saved')
            return redirect('some_view')
        else:
            messages.error(request, 'Error')
    else:
        form = Sublist()
    return render(request, 'subscrap/addnew.html', {'form': form})

:在Django模型都寫在PascalCase,snake_case,所以你可能想從模型重命名sublistSublist


注意:通常FormModelForm…Form后綴結尾,以避免與模型的名稱沖突,並明確我們正在使用form 因此它可能是更好的使用SublistForm ,而不是Sublist


注意:通常最好使用settings.AUTH_USER_MODEL [Django-doc]來引用用戶模型,而不是直接使用students模型。 有關更多信息,您可以查看文檔引用User模型部分

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM