class Cities(models.Model):
city_main_image = models.FileField()
city_name = models.CharField(max_length=200)
city_info = models.CharField(max_length=1000)
city_images = models.FileField()
在我的models.py中我有Cities类,我想上传这个类变量的几个图像,显然是city_images
变量我该怎么做?有没有办法做到这一点?
答案 0 :(得分:1)
在回答您的问题之前,很少有关于您的代码的说明。
1)坚持使用单一的模型名称,而不是城市
2)不要在每个字段中重复模型名称,因此你得到“main_image”,
“名称”,“信息”,“图像”。
3)将ImageField用于图像而不是FileField
4)不需要为main_image和图像提供2个字段。您可以添加额外的字段以使图像成为主图像。
现在,要回答您的问题,您需要阅读SQL数据库中的关系。 要使用django的ORM使用模型之间的关系,请查看https://docs.djangoproject.com/en/2.0/ref/models/fields/#django.db.models.ForeignKey
您有两个选项:ForeignKey
或ManyToManyField
。坚持ForeignKey
,因为你不需要多对多的关系。
所以你会得到以下内容:
class City(models.Model):
...
class CityImage(models.Model):
image = models.ImageField(...)
city = models.ForeignKey(City) # you might need to add on_delete parameter depending on your django version.
或
class CityImage(models.Model):
image = models.ImageField(...)
class City(models.Model):
...
images = models.ManyToManyField(CityImage)
答案 1 :(得分:1)
onGridReady(params) {
params.api.sizeColumnsToFit();
this.gridApi = params.api;
this.gridColumnApi = params.columnApi;
let URL = 'http://localhost:3000/employees';
let myHeaders = new Headers();
myHeaders.set('Content-Type', 'application/json');
let myParams = new URLSearchParams()
myParams.set('sort', params.sortModel);
myParams.set('filter', params.filterModel);
let options = new RequestOptions({ headers: myHeaders, params: myParams });
this.http.get(URL, options).subscribe(data => {
console.log(data);
var newData = data.json();
newData.forEach(function (data, index) {
newData.id = "R" + (index + 1);
});
//params.api.setRowData(newData);
var dataSource = {
rowCount: null,
getRows: function (params) {
console.log("asking for " + params.startRow + " to " + params.endRow);
setTimeout(function () {
console.log("sortModel: ", JSON.stringify(params.sortModel));
console.log("filterModel: ", JSON.stringify(params.filterModel));
console.log("--------------------------");
var dataAfterSortingAndFiltering = sortAndFilter(newData, params.sortModel, params.filterModel);
var rowsThisPage = dataAfterSortingAndFiltering.slice(params.startRow, params.endRow);
var lastRow = -1;
if (dataAfterSortingAndFiltering.length <= params.endRow) {
lastRow = dataAfterSortingAndFiltering.length;
}
params.successCallback(rowsThisPage, lastRow);
}, 500);
}
};
params.api.setDatasource(dataSource);
});
/* this.http
.get('assets/db.json')
.subscribe(data => {
console.log(data);
var newData = data.json();
newData.forEach(function (data, index) {
newData.id = "R" + (index + 1);
});
//params.api.setRowData(newData);
var dataSource = {
rowCount: null,
getRows: function (params) {
console.log("asking for " + params.startRow + " to " + params.endRow);
setTimeout(function () {
//var str=JSON.stringify(params.sortModel);
//console.log("sortModel: ", JSON.stringify(params.sortModel));
//var try2=params.sortModel;
//var try3 = try2[0];
//console.log("try3", try3);
//console.log("try3.colId",try3.sort);
//console.log("filterModel: ", JSON.stringify(params.filterModel));
//console.log(params.filterModel);
//console.log("--------------------------");
var dataAfterSortingAndFiltering = sortAndFilter(newData, params.sortModel, params.filterModel);
var rowsThisPage = dataAfterSortingAndFiltering.slice(params.startRow, params.endRow);
var lastRow = -1;
if (dataAfterSortingAndFiltering.length <= params.endRow) {
lastRow = dataAfterSortingAndFiltering.length;
}
params.successCallback(rowsThisPage, lastRow);
}, 500);
}
};
params.api.setDatasource(dataSource);
});
*/
}
}
现在,您所在的城市中的每个城市都可以在另一个名为CityImages的模型中拥有一个或多个图像。如果我们以表格的形式进行讨论,那么表格中的行的主键将与表city_images中的一行或多行相关联。我强烈建议您阅读django的官方入门教程。另外,我个人认为this tutorial对初学者非常有帮助。以防它有帮助。
答案 2 :(得分:0)
您可以这样做的一种方法是制作一个CityImage
模型,该模型允许您为ForeignKey
模型制作City
,其中related_name=images
为反向查找。
class City(models.Model):
name = models.CharField(max_length=200)
info = models.CharField(max_length=1000)
@property
def main_image(self):
try:
return self.images.get(primary=True)
except CityImage.DoesNotExist:
pass
except CityImage.MultipleObjectsReturned:
# Handle this case, the application should ensure only one is set to `True` at a time...
class CityImage(models.Model):
city = models.ForeignKey(City, related_name='images')
primary = models.BooleanField(default=False)
image = models.FileField()