Linuxでdjango 1.10 + Apacheを使用しています。 私は小さなwebappを作成して(dropzone.jsを使って)文書をアップロードし、特定のファイルを表示/変更/削除できるユーザーを指定する機能を実装したいが、方法を理解できない。私はManyToManyFieldを使用しようとしましたが、フィールド自体を正しくサポートしていないかもしれません。ユーザがアップロードしたファイルに特定のユーザを割り当てて削除/削除する方法(Django + Apache)
"ドキュメント" モデルはこれです:
モデル
class Document(models.Model):
file = models.FileField(upload_to = 'files/')
#validators=[validate_file_type])
uploaded_at = models.DateTimeField(auto_now_add = True)
extension = models.CharField(max_length = 30, blank = True)
thumbnail = models.ImageField(blank = True, null = True)
is_public = models.BooleanField(default = False)
accesible_by = models.ManyToManyField(User) #This is my attempt at doing this task.
def clean(self):
self.extension = self.file.name.split('/')[-1].split('.')[-1]
if self.extension == 'xlsx' or self.extension == 'xls':
self.thumbnail = 'xlsx.png'
elif self.extension == 'pptx' or self.extension == 'ppt':
self.thumbnail = 'pptx.png'
elif self.extension == 'docx' or self.extension == 'doc':
self.thumbnail = 'docx.png'
def delete(self, *args, **kwargs):
#delete file from /media/files
self.file.delete(save = False)
#call parent delete method.
super().delete(*args, **kwargs)
#Redirect to file list page.
def get_absolute_url(self):
return reverse('dashby-files:files')
def __str__(self):
return self.file.name.split('/')[-1]
class Meta():
ordering = ['-uploaded_at']
書類の作成を処理するために、マイビュー:
ビュー誰にも事前に
class DocumentCreate(CreateView):
model = Document
fields = ['file', 'is_public']
def form_valid(self, form):
self.object = form.save(commit = False)
## I guess here i would Add the (self.request.user) to the accesible_by Field.
self.object.save()
data = {'status': 'success'}
response = JSONResponse(data, mimetype =
response_mimetype(self.request))
return response
感謝任意のアイデアや提案について...
私はそこに悪いです。私はすでに文書を修正して削除することができるという意見を持っています。私の質問は、個々のファイルにユーザー権限を割り当てることができるので、それに基づいて変更/削除することができます。 –
adminを使用してユーザーをドキュメントにすばやく割り当てることができます。モデルのaccessible_byからのユーザー権限は、ドキュメントを持ち、これとそのユーザーがアクセスできることを示唆しているようです。 – keni
はい。正確に何が起こっているのか。もしそれが許可枠組みを持っていなければ、あなたが編集したアプローチを試してみてください。 –